题目:
思路:三个指针,分别记录左右边界和当前指的index。有一个样例不好通过,是[2,0,1],需要注意的是:(1)如果nums[i]==2,交换当前nums[i]和nums[r]后,不要给i+1,因为可能交换后的nums[i]=1;(2)在while大循环中i<=r,不是i<r。
代码:
class Solution {
public:
void sortColors(vector<int>& nums) {
int length=nums.size();
int l=0,r=length-1,i=0;
while (l<r && i<=r){
if (nums[i]==2){
swap(nums[i],nums[r]);
r--;
}
else if (nums[i]==0){
swap(nums[i],nums[l]);
l++;
i++;
}
else i++;
}
}
};
----
2020.4.5 第6题。