解析:这道题就是给了一个数组,其中都是乱序的0,1,2,让我们把乱序的0,1,2重新排列成0000……1111……2222.
这里用一个i来遍历数组,left和right分别保存0和2的边界,i在遍历过程中遇到0与left交换,遇到2与right交换。需要注意的是,当i与left交换的时候,left++,i++,但是i与right交换之后,只有right--,i不需要变换,因为交换完的right值还需要进行排序。
代码如下:
class Solution {
public void sortColors(int[] nums) {
if(nums==null || nums.length==0)
return;
int left = 0,right = nums.length-1;
int i=0;
while(i<=right){
if(nums[i]==1)
i++;
else if(nums[i]==0){
swap(nums,i,left);
i++;
left++;
}
else{
swap(nums,i,right);
right--;
}
}
}
public void swap(int[] nums,int i,int j){
int temp = nums[j];
nums[j] = nums[i];
nums[i] = temp;
}
}