要求:把只含012的数组排序,要求空间O(1)
思路:j遍历,遇到0放左边,遇到2放右边,时间O(n)空间O(1)
class Solution {
public:
void sortColors(vector<int>& nums) {
int n=nums.size();
int i=-1,j=0,k=n;
//ik固定,j是0跟i换,是2跟k换
while(j<k){
if(nums[j]==0&&i<j)//i超过j会出错
swap(nums[j],nums[++i]);
else if(nums[j]==2)
swap(nums[j],nums[--k]);
else j++;
}
}
};