
/**
最终状态:[0,L)-->0; [L,i)-->1; (R,n]-->2
即,与三路快排思想类似将数组分为三个区域,基准为1,小于基准的放左边,等于基准的放中间,大于基准的放右边
定义三个指针,left、right置于数组两端,i用于遍历数组
若nums[i] == 0,则将nums[i]与nums[left]交换,再迭代i与left即可; 即将小于基准的置于左边
若nums[i] == 1,则无需处理,迭代i即可; 即将等于基准的放中间
若nums[i] == 2,则将nums[i]与nums[right]交换,再迭代right即可; 即将大于基准的置于右侧
*/
class Solution {
/**
最终状态:[0,L)-->0; [L,i)-->1; (R,n]-->2
即,与三路快排思想类似将数组分为三个区域,基准为1,小于基准的放左边,等于基准的放中间,大于基准的放右边
定义三个指针,left、right置于数组两端,i用于遍历数组
若nums[i] == 0,则将nums[i]与nums[left]交换,再迭代i与left即可; 即将小于基准的置于左边
若nums[i] == 1,则无需处理,迭代i即可; 即将等于基准的放中间
若nums[i] == 2,则将nums[i]与nums[right]交换,再迭代right即可; 即将大于基准的置于右侧
*/
public void sortColors(int[] nums) {
int left = 0;
int right = nums.length - 1;
int i = 0;
while(i <= right) {
if(nums[i] == 0) {
swap(nums, left, i);
i++;
left++;
} else if(nums[i] == 1) {
i++;
} else {
swap(nums, right, i);
right--;
}
}
}
private void swap(int[] nums, int i, int j) {
int temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
}
}

被折叠的 条评论
为什么被折叠?



