1. 程式人生 > >8.23 陣列的partition調整

8.23 陣列的partition調整

題目】:

  給定一個有序陣列arr,調整arr使得這個陣列的左半部分沒有重複元素且升序,而不用保證右部分是否有序

  例如:

    arr=[1, 2, 2, 2, 3, 3, 4, 5, 6, 6, 7, 7, 8, 8, 8, 9],調整之後arr=[1, 2, 3, 4, 5, 6, 7, 8, 9, ...]

 

補充題目】:

  給定一個數組arr,其中只可能含有0、1、2三個值,請實現arr的排序

  另一種問法為:有一個數組,其中只有紅球、籃球和黃球,請實現紅球全放在陣列的左邊,籃球放在中間,黃球放在右邊

  另一種問法為:有一個數組,再給定一個值k,請實現比k小的數都放在陣列的左邊,等於k的數都放在陣列的中間,比k大的數都放在陣列的右邊

 

要求】:

  1、所有題目實現的時間複雜度為O(N)

  2、所有題目實現的額外空間複雜度為O(1)

 

題目來源:左程雲老師《程式設計師程式碼面試指南》