LeetCode演算法題75 顏色分類解析

2021-09-11 02:23:57 字數 1497 閱讀 7664

給定乙個包含紅色、白色和藍色,一共 n 個元素的陣列,原地對它們進行排序,使得相同顏色的元素相鄰,並按照紅色、白色、藍色順序排列。

此題中,我們使用整數 0、 1 和 2 分別表示紅色、白色和藍色。

注意:

不能使用**庫中的排序函式來解決這道題。

示例:

輸入: [2,0,2,1,1,0]

輸出: [0,0,1,1,2,2]

高階:

這個題提示的思路就是直接兩趟掃瞄計數,這個比較簡單,使用c++編寫,另外一種可以利用只有三種顏色,紅色開頭,藍色結尾,那麼只需要設定兩個指標,紅指標指向頭和藍指標指向尾,如果碰到0就與紅指標指向的數字交換,然後紅指標加1,如果碰到2,那麼與藍色指標指向的數字交換,然後藍色指標減1,需要注意的是,由於遍歷都是從前往後,所以防止出現將0換到前面的情況,與藍指標交換完之後需要退一步,否則就會出現跳過遍歷的情況,另外,遍歷時,直接遍歷藍色指標個數即可,這個數字是不停變換的,當當前步大於藍色指標時,說明已經是排好序了。

c++源**:

class

solution

;int k =0;

for(

int i=

0;i) count[nums[i]]++

;for

(int i=

0;i<

3;i++

)for

(int j=

0;j;j++

) nums[k++

]= i;}}

;

python3源**:

class

solution

:def

sortcolors

(self, nums)

:"""

:type nums: list[int]

:rtype: void do not return anything, modify nums in-place instead.

"""n =

len(nums)

r =0 b = n-

1 i =

0while i <= b:

if nums[i]==0

: nums[r]

, nums[i]

= nums[i]

, nums[r]

r = r +

1elif nums[i]==2

: nums[b]

, nums[i]

= nums[i]

, nums[b]

b = b -

1 i = i -

1 i = i +

1

LeetCode刷題 (75) 顏色分類

給定乙個包含紅色 白色和藍色,一共 n 個元素的陣列,原地對它們進行排序,使得相同顏色的元素相鄰,並按照紅色 白色 藍色順序排列。此題中,我們使用整數 0 1 和 2 分別表示紅色 白色和藍色。注意 不能使用 庫中的排序函式來解決這道題。示例 輸入 2,0,2,1,1,0 輸出 0,0,1,1,2,...

leetcode刷題 75顏色分類

給定乙個包含紅色 白色和藍色,一共 n 個元素的陣列,原地對它們進行排序,使得相同顏色的元素相鄰,並按照紅色 白色 藍色順序排列。此題中,我們使用整數 0 1 和 2 分別表示紅色 白色和藍色。注意 不能使用 庫中的排序函式來解決這道題。示例 輸入 2,0,2,1,1,0 輸出 0,0,1,1,2,...

Leetcode 原地演算法 75 顏色分類

給定乙個包含紅色 白色和藍色,一共 n 個元素的陣列,原地對它們進行排序,使得相同顏色的元素相鄰,並按照紅色 白色 藍色順序排列。此題中,我們使用整數 0 1 和 2 分別表示紅色 白色和藍色。注意 不能使用 庫中的排序函式來解決這道題。示例 輸入 2,0,2,1,1,0 輸出 0,0,1,1,2,...