题目要求:
分析:
- 设置两个滑动指针,分别为left和right,在初始状态,left指向nums[0],right指向nums[nums.length - 1];
- 设置变量i,对整个nums进行遍历:
当nums[i] == 0时,交换nums[i]和nums[left],且left ++,i ++;
当nums[i] == 1时,不用做任何交换,i ++;
当nums[i] == 2时,交换nums[i]和nums[right],且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;
}
}