本题刚毕业的时候做过,其实这次也算是大概知道思路,就是quicksort的变种,非常接近解出了,但还是没做出来。
思路:
- 设定两个pivot:
p0
:p0
右边的所有元素都是0,p0
本身大于0p2
:p2
左边的所有元素都是2,p2
本身小于2
从第一个点(
curr
)访问到p2
所在点,结束,要注意,要访问所有的点curr
如果是0:- 交换该点和p0
curr
向右移动1p0
向右移动1
- 交换该点和p0
curr
如果是1:curr
向右移动1
curr
如果是2:- 交换
curr
和p2
p2
左移1curr
不动
```java class Solution { public void sortColors(int[] nums) { int p0 = 0; int i = 0; int p2 = nums.length - 1; 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 tmp = nums[i]; nums[i] = nums[j]; nums[j] = tmp; } } ```