一. 题目

二. 思路

1. 计数

  • 统计数量,然后赋值。

  • 两次遍历。

2. 单指针

3. 双指针1

4. 双指针2

三. 代码

3. 双指针1

class Solution
{
    void swap(int[] nums, int x, int y)
    {
        int temp = nums[x];
        nums[x] = nums[y];
        nums[y] = temp;
    }

    public void sortColors(int[] nums)
    {
        int p0 = 0, p1 = 0;
        for (int i = 0; i < nums.length; ++i)
            if (nums[i] == 1) swap(nums, p1++, i);
            else if (nums[i] == 0)
            {
                swap(nums, p0, i);
                if (p0 < p1) swap(nums, p1, i);
                ++p0;
                ++p1;
            }
    }
}