暴力的办法就是普通数组排序,但此题有其特殊性,即只有3个不同的数字,0,1,2,对此排序
想法就是遇到0,就都放到最前面,遇到2,就都放到最后面,遇到1,就pass。
但必须要注意的是对于遇到2,index i不能++前进,因为这个换来的数字可能是0 或是1,必须再次排序,但由于有了p2--,所以并不会死循环。
/**
* @param nums: A list of integer which is 0, 1 or 2* @return: nothing
*/
public void sortColors(int[] nums) {
// write your code here
if (nums == null || nums.length < 2) {
return;
}
//1 int i, p0, p1, p2 = nums.length - 1;
int i = 0, p0 = 0, p2 = nums.length - 1;
//2 while (i < p2) {
while (i <= p2) {
if (nums[i] == 0) {
swap(nums, i, p0);
p0++;
i++;
} else if (nums[i] == 1) {
i++;
} else {
swap(nums, i, p2);
p2--;
}
}
}
private void swap(int []nums, int i, int j) {
int temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
}
//public void sortColors(int[] nums) {
// if (nums == null || nums.length < 2) {
// return;
// }
// for (int i = 0; i < nums.length - 1; i++) {
// for (int j = i + 1; j < nums.length; j++) {
// if (nums[i] > nums[j]) {
// int temp = nums[i];
// nums[i] = nums[j];
// nums[j] = temp;
// }
// }
// }
//}