Leetcode 75. 颜色分类
分析[1]:采用两个指针,是0就和左边的数据交换,是2就和右边的数据交换。
因为交换过来的元素仍可能为2,所以再次对此元素进行判断
8 ms:
class Solution {
public:
void sortColors(vector<int>& nums) {
if (nums.empty())return;
int left = 0, right = nums.size()-1;
for (int i = 0; i <=right; i++)//必须写right,否则全是2死循环
{
if (nums[i] == 0)
swap(nums[i], nums[left++]);//不可能交换还是0,除非全是0
if (nums[i] == 2)
{
swap(nums[i], nums[right--]);
i--;//交换完还是2,不能跳过
}
}
}
};
自己写的一个0ms减少不必要的交换:
class Solution {
public:
void sortColors(vector<int>& nums) {
if (nums.empty())return;
int left = 0, right = nums.size()-1;
for (int i = 0; i<=right; i++)
{
if (nums[i] == 0)
swap(nums[i], nums[left++]);
}
for (int j=right; j>=0;j--)
{
if (nums[j] == 2)
{
swap(nums[j], nums[right--]);
}
}
}
};