LeetCode 75 顏色分類

2021-10-07 11:16:35 字數 784 閱讀 6227

思路:

此題屬於荷蘭國旗問題。

準備三個指標zero、cur、two,

zero代表所指向位置數字為0且前面數字均為0,

cur代表當前所指向的數字

two代表所指向位置數字為2且後面數字均為2

以1作為識別符號進行partition

初始時,zero指向-1位置,即0位置的前乙個位置,cur指向0位置,two指向num.length位置,即最後乙個位置的後乙個位置

開始從左向右遍歷,

若nums[cur] == 0,則將zero向右移動一位,cur位置與zero位置的數進行交換,cur向後移動一位。此處可以移動cur指標,是因為cur與zero交換之後,能夠保證cur所指向的是一定為1,所以可以向後進行移動

若nums[cur] == 1,則cur向後移動一位

若nums[cur] == 2,則將two向左移動一位,cur位置與two位置的數進行交換,此時不可以移動cur指標,因為後面two指向的元素並不確定是幾,交換完成後,只能保證two指標處數字為2,cur指標位置的數字無法確定

public void sortcolors(int nums) 

int cur = 0;

int zero = -1;

int two = nums.length;

while (cur < two) else if (nums[cur] == 1) else }}

private void swap(int nums, int i, int j)

**參考自:

leetcode 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,...

leetcode75 顏色分類

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