原题出处:https://leetcode.cn/leetbook/read/top-interview-questions-medium/xvg25c/
解法一:
class Solution {
public void sortColors(int[] nums) {
int left = 0;
int right = nums.length - 1;
int index = 0;
while (index <= right) {
if (nums[index] == 0) {
swap(nums,left++,index++);
} else if (nums[index] == 1) {
index++;
} else if ((nums[index] == 2)){
swap(nums,index,right--);
}
}
}
private void swap(int[] nums,int i ,int j) {
int tmp = nums[i];
nums[i] = nums[j];
nums[j] = tmp;
}
}
思路:交换法,定义三个指针,一个左指针,一个是右指针,一个是当前的指针。
然后遍历当前的数组,
当遇到0时,把它往左移,即当前指针指向的数组和左指针指向的数组交换位置,然后左指针向右移,当前指针也向右移。
当遇到1时,元素不移动,只移动当前指针向右移即可。
当遇到2时,把它往右移,即当前指针指向的数组和右指针指向的数组交换位置,然后右指针向右移。