class Solution {
public:
void sortColors(vector<int>& nums) {
int red = 0, blue = nums.size() - 1;
for (int i = 0; i < blue + 1;)
{
if (nums[i] == 0)
swap(nums[i++], nums[red++]);
else if (nums[i] == 2)
swap(nums[i], nums[blue--]);
else
i++;
}
}
public:
void sortColors(vector<int>& nums) {
int red = 0, blue = nums.size() - 1;
for (int i = 0; i < blue + 1;)
{
if (nums[i] == 0)
swap(nums[i++], nums[red++]);
else if (nums[i] == 2)
swap(nums[i], nums[blue--]);
else
i++;
}
}
};
leetcode上发现这个方法挺新颖的。设置两个指针一个从前一个从后,然后顺序遍历,如果符合在前边存放元素的要求则跟前边元素交换,如果符合在后边存放元素的要求则跟后边元素交换。最后和后边过来的指针碰面时候,遍历结束