题目:0,1,2数组,要求0放在左边,2放在右边,1在中间
解题
解法:双指针
双指针分别记录02边界。处理直到到达2边界
void sortColors(vector<int>& nums) {
int zero = -1;
int two = nums.size();
int i = 0;
while (i < two) {
if (nums[i] == 0) {
swap(nums[zero + 1], nums[i]); //不能直接覆盖
i ++;
zero ++;
}else if (nums[i] == 2) { // 交换后i位置未处理,不可++
swap(nums[two - 1], nums[i]);
two --;
}else {
i ++;
}
}
}
复杂度
- 时间:O(n)
- 空间:O(1)