0%

75. Sort Colors

双指针 O(n) time O(1) space
题目要求one-pass,所以从头开始往后扫,遇到0往前放,遇到2往后放
i0的左边都是0,i2的右边都是2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Solution {
public:
void sortColors(vector<int>& nums) {
int n = nums.size();
int i0 = 0, i2 = n - 1; // i0和i2分别表示下一个0和2要放的位置
for (int i = 0; i <= i2; ++i) { // 这里必须是<=因为i2最后i和i2相遇时i2也要检查
if (nums[i] == 0) {
swap(nums[i], nums[i0++]);
} else if (nums[i] == 2) {
swap(nums[i--], nums[i2--]);
}
}
}
};