题目链接:https://leetcode-cn.com/problems/sort-colors/
一个指针标记0的右端点,一个指针标记2的左端点,一个指针遍历数组,若出现0或2就分别与两个标记端点的指针位置互换。
代码如下:
class Solution {
public:
void sortColors(vector<int>& s) {
int len = s.size();
int i = 0, j = len - 1;
int curr = 0;
while(curr <= j) {
if(s[curr] == 0) {
swap(s[i], s[curr]);
i++;
curr++;
} else if(s[curr] == 2) { //没有curr++因为交换后还需要判断新元素
swap(s[curr], s[j]);
j--;
} else {
curr++;
}
}
}
};