http://blog.csdn.net/linhuanmars/article/details/24286349
Code ganker大神的第二种思路是怎么想到的?...
。。。。跑了几个例子想明白了, 遇到0或者1,就依次赋值, 赋值的顺序总会使得0在最左边, 然后是1, 然后是2
有一个地方需要注意:
public class Solution {
public void sortColors(int[] nums) {
if(nums == null || nums.length == 0){
return;
}
int idx0 = 0;
int idx1 = 0;
for(int i = 0; i < nums.length; i++){
if(nums[i] == 0){
nums[i] = 2;
nums[idx1++] = 1;
nums[idx0++] = 0;
}
if(nums[i] == 1){
nums[i] = 2;
nums[idx1++] = 1;
}
}
}
}
Runtime Error Message: | Line 16: java.lang.ArrayIndexOutOfBoundsException: 2 |
Last executed input: | [1,0] |
正确代码:
public class Solution {
public void sortColors(int[] nums) {
if(nums == null || nums.length == 0){
return;
}
int idx0 = 0;
int idx1 = 0;
for(int i = 0; i < nums.length; i++){
if(nums[i] == 0){
nums[i] = 2;
nums[idx1++] = 1;
nums[idx0++] = 0;
}else if(nums[i] == 1){
nums[i] = 2;
nums[idx1++] = 1;
}
}
}
}