题目链接:https://leetcode-cn.com/problems/sort-colors/
思路如下:
p 指针向右移动,left 指针向右移动,right 指针向左移动。
- 如果 p 指针遇到 1,则直接跳过(p++)
- 如果 p 指针遇到 0,则跟 left 指针交换值,然后 p 指针右移(p++),left 指针右移(left++)
- 如果 p 指针遇到 2,则跟 right 指针交换值,然后 right 指针左移(right–),再次对 p 指针的值进行判断(p保持不动)
Java代码如下:
class Solution {
public void sortColors(int[] nums) {
int p = 0, left = 0, right = nums.length - 1;
while (p <= right) {
int t = nums[p];
if (t == 0) {
swap(nums, p++, left++);
} else if (t == 1) {
p++;
} else {
swap(nums, p, right--);
}
}
}
private void swap(int[] nums, int i, int j) {
int tmp = nums[i];
nums[i] = nums[j];
nums[j] = tmp;
}
}
C++代码如下: