75 顏色分類(荷蘭旗問題)

2021-10-09 23:59:37 字數 1310 閱讀 2183

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