題目描述:
給定乙個包含紅色、白色和藍色,一共 n 個元素的陣列,原地對它們進行排序,使得相同顏色的元素相鄰,並按照紅色、白色、藍色順序排列。
此題中,我們使用整數 0、 1 和 2 分別表示紅色、白色和藍色。
注意:不能使用**庫中的排序函式來解決這道題。
解題思路:初始想法就是排序就能解決了,但是題目要求需要常數空間和一趟掃瞄。
所以就想到可以使用快速排序的思想,將大於1的放左邊,小於1的放右邊就可以了。
也就是採用雙指標,左右指標,當左指標的值大於1,右指標的值小於1,交換這兩個數。
比如:[2,0,2,1,1,0] 一次排序後為[0,0,2,1,1,2]
在對右邊進行排序後:[0,0,1,1,2,2]
**:
//採用快速排序的思想,將大於1的放左邊,小於1的放右邊
public
static
void
sortcolors
(int
nums)
}//再對左邊進行排序
int index = l;
r = index;
l =0;
while
(l < r)
}//對右邊進行排序
l = index;
r = nums.length-1;
while
(l < r)
} system.out.
println
(arrays.
tostring
(nums));
}
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,...