思路:
此題屬於荷蘭國旗問題。
準備三個指標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,...