給定乙個包含紅,白,藍且長度為 n 的陣列,將陣列元素進行分類使相同顏色的元素相鄰,並按照紅、白、藍的順序進行排序。
我們可以使用整數 0,1 和 2 分別代表紅,白,藍。
不能使用**庫中的排序函式來解決這個問題。
排序需要在原陣列中進行。
您在真實的面試中是否遇到過這個題? 是
給你陣列[1, 0, 1, 2]
, 需要將該陣列原地排序為[0, 1, 1, 2]
。
乙個相當直接的解決方案是使用計數排序掃瞄2遍的演算法。
首先,迭代陣列計算 0,1,2 出現的次數,然後依次用 0,1,2 出現的次數去覆蓋陣列。
你否能想出乙個僅使用常數級額外空間複雜度且只掃瞄遍歷一遍陣列的演算法?
實現**:
簡單的快排就行
class solution:
"""@param nums: a list of integer which is 0, 1 or 2
@return: nothing
"""def sortcolors(self, nums):
# write your code here
self.quicksort(nums, 0, len(nums)-1)
def qsort(self, nums, left, right):
pviot = nums[left]
while left < right:
while left < right and nums[right] >= pviot:
right -= 1
if left < right:
nums[left], nums[right] = nums[right], nums[left]
left += 1
while left < right and nums[left] <= pviot:
left += 1
if left < right:
nums[left], nums[right] = nums[right], nums[left]
right -= 1
return left
def quicksort(self, nums, left, right):
if left >= right:
return
mid = self.qsort(nums, left, right)
self.quicksort(nums, left, mid-1)
self.quicksort(nums, mid+1, right)
lintcode 148 顏色分類
給定乙個包含紅,白,藍且長度為 n 的陣列,將陣列元素進行分類使相同顏色的元素相鄰,並按照紅 白 藍的順序進行排序。我們可以使用整數 0,1 和 2 分別代表紅,白,藍。注意事項 不能使用 庫中的排序函式來解決這個問題。排序需要在原陣列中進行。樣例給你陣列 1,0,1,2 需要將該陣列原地排序為 0...
LintCode 顏色分類
題目 給定乙個包含紅,白,藍且長度為 n 的陣列,將陣列元素進行分類使相同顏色的元素相鄰,並按照紅 白 藍的順序進行排序。我們可以使用整數 0,1 和 2 分別代表紅,白,藍。挑戰 乙個相當直接的解決方案是使用計數排序掃瞄2遍的演算法。首先,迭代陣列計算 0,1,2 出現的次數,然後依次用 0,1,...
Lintcode 顏色排序2
給定乙個有n個物件 包括k種不同的顏色,並按照1到k進行編號 的陣列,將物件進行分類使相同顏色的物件相鄰,並按照1,2,k的順序進行排序。注意事項 you are not suppose to use the library s sort function for this problem.k n ...