# 75.颜色分类

## 问题描述
[75.颜色分类](https://leetcode.cn/problems/sort-colors/)

## 解题思路
这里，我们需要三个指针`l`, `r`, `idx`, `l`用来存放`0`,`r`用来存放`2`，`idx`用来进行遍历数组。

要注意的是，在遍历数组时:
- `if nums[idx] == 0`，需要交换`nums[idx]`和`nums[l]`的值，同时`idx++; l++;`
- `if nums[idx] == 1`，`idx++`即可
- `if nums[idx] == 2`，需要交换`nums[idx]`和`nums[l]`的值，但此时只是`r--`，不会`idx++`，这是因为新的交换后的`nums[idx]`的值可能是0、1、2中的任意一个，因此还需要重新判断`nums[idx]`
- 如果`idx == l`，那么`[0, idx]`区间范围内的数都是0，如果`idx != l`，那么`[0, l - 1]`区间范围内都是0，`[l, idx)`区间范围内都是1，因此可以进行`idx++;`

## 代码
```cpp
class Solution {
  public:
    void sortColors(vector<int> &nums) {
        int tmp = 0, index = 0;
        int l = 0, r = nums.size() - 1;
        while (index <= r) {
            if (nums[index] == 0) {
                tmp = nums[l];
                nums[l++] = 0;
                nums[index++] = tmp;
            } else if (nums[index] == 2) {
                tmp = nums[r];
                nums[r--] = 2;
                nums[index] = tmp;
            } else
                index++;
        }
    }
};
```





