1. 程式人生 > >8.23 數組的partition調整

8.23 數組的partition調整

代碼 數組a tro 復雜 空間復雜度 bsp 來源 可能 升序

題目】:

  給定一個有序數組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)

題目來源:左程雲老師《程序員代碼面試指南》

8.23 數組的partition調整