給定乙個包含紅色、白色和藍色,一共 n 個元素的陣列,原地 對它們進行排序,使得相同顏色的元素相鄰,並按照紅色、白色、藍色順序排列。
此題中,我們使用整數 0、 1 和 2 分別表示紅色、白色和藍色。
注意:
不能使用**庫中的排序函式來解決這道題。
示例:
輸入: [2,0,2,1,1,0]
輸出: [0,0,1,1,2,2]
高階:這題實際上是荷蘭旗問題,先介紹下荷蘭旗問題:
荷蘭國旗是由紅白藍3種顏色的條紋拼接而成,如下圖所示:
假設這樣的條紋有多條,且各種顏色的數量不一,並且隨機組成了乙個新的圖形,新的圖形可能如下圖所示,但是絕非只有這一種情況:
需求是:把這些條紋按照顏色排好,紅色的在上半部分,白色的在中間部分,藍色的在下半部分,我們把這類問題稱作荷蘭國旗問題。
題目要求一次遍歷就可實現排序,那麼就要求邊遍歷變排序,我們可以這樣想,依次遍歷每個元素:
nums[index] == 0
時,將 0 放在陣列前面;
nums[index] == 1
時,我們不錯任何處理;
nums[index] == 2
時,將 2 放在陣列後面;
我們定義三個指標idx1, idx2, index
來實現這個過程,index
表示遍歷陣列用到的下標值,idx1
表示0~idx1
存放 0,每次的 0 新增到末尾,即idx1++
,idx2
表示idx2~n-1
存放 2,每次的 2 新增到開頭,即idx2--
;
具體**如下:
class
solution
public
void
sortcolors
(int
nums)
else
if(nums[index]==2
)else
index++
;// 對於1,不做任何處理}}
}
75 顏色分類 荷蘭國旗問題
給定乙個包含紅色 白色和藍色,一共 n 個元素的陣列,原地對它們進行排序,使得相同顏色的元素相鄰,並按照紅色 白色 藍色順序排列。此題中,我們使用整數 0 1 和 2 分別表示紅色 白色和藍色。注意 不能使用 庫中的排序函式來解決這道題。示例 輸入 2,0,2,1,1,0 輸出 0,0,1,1,2,...
leetcode75 顏色分類(荷蘭國旗)
給定乙個包含紅色 白色和藍色,一共 n 個元素的陣列,原地對它們進行排序,使得相同顏色的元素相鄰,並按照紅色 白色 藍色順序排列。此題中,我們使用整數 0 1 和 2 分別表示紅色 白色和藍色。注意 不能使用 庫中的排序函式來解決這道題。示例 輸入 2,0,2,1,1,0 輸出 0,0,1,1,2,...
Leetcode第75題 顏色分類(荷蘭國旗問題)
給定乙個包含紅色 白色和藍色,一共 n 個元素的陣列,原地對它們進行排序,使得相同顏色的元素相鄰,並按照紅色 白色 藍色順序排列。此題中,我們使用整數 0 1 和 2 分別表示紅色 白色和藍色。注意 不能使用 庫中的排序函式來解決這道題。真香警告.jpg 示例 輸入 2,0,2,1,1,0 輸出 0...