給定乙個包含紅色、白色和藍色,一共 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,...