給定一個包含紅色、白色和藍色,一共 n 個元素的數組,原地對它們進行排序,使得相同顏色的元素相鄰,并按照紅色、白色、藍色順序排列。
此題中,我們使用整數 0、 1 和 2 分別表示紅色、白色和藍色。
注意:
不能使用代碼庫中的排序函數來解決這道題。
示例:
輸入: [2,0,2,1,1,0]
輸出: [0,0,1,1,2,2]
代碼
class Solution {public void swap(int[] nums,int l,int r) {int temp=nums[l];nums[l]=nums[r];nums[r]=temp;}public void sortColors(int[] nums) {int l=0,r=0;//l指向0的位置, r指向1的位置for(int i=0;i<nums.length;i++){if(nums[i]==1){swap(nums,r,i);r++;//放置在1的位置}else if(nums[i]==0){swap(nums,i,l);if(l<r)
//0后面的1被交換到了i位置,所以需要將i位置的1,放到r指向的位置(連續1的末尾){swap(nums,i,r);} l++;r++;}}}
}