题目链接:LeeCode75颜色分类
题目描述:
遍历一遍数组将0全放到前面,2都放到后面就结束,但是可能会出现特殊情况:
1.例如{2,0,2,0,2}第一次将结尾的2换到开头之后i后移会丢失对i=0处2得定位,使题目出错。
2.还有一种样例:{1,2,0},1不动,2和零换变成{1,0,2}之后指针移动到2失去了对零的定位
解决:
第一种情况解决可以用while判断只要当前位置是2会一直分配位置。
第二种可以将对0的判断放在2判断之后,因为0一定是后面像前面换所以换0后不用考虑2的问题
public static void sortColors(int[] nums) {
int l=0,r=nums.length-1;
for (int i = 0; i < nums.length; i++) {
while (r>i&&nums[i]==2){
swap(nums,i,r--);
}
if(nums[i]==0){
swap(nums,i,l++);
continue;
}
}
}
public static void swap(int[] nums,int a,int b) {
int temp=nums[a];
nums[a]=nums[b];
nums[b]=temp;
}