solution.md 2.0 KB
Newer Older
每日一练社区's avatar
每日一练社区 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
# 颜色分类

<p>给定一个包含红色、白色和蓝色,一共 <code>n</code><em> </em>个元素的数组,<strong><a href="https://baike.baidu.com/item/%E5%8E%9F%E5%9C%B0%E7%AE%97%E6%B3%95" target="_blank">原地</a></strong>对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。</p><p>此题中,我们使用整数 <code>0</code>、 <code>1</code><code>2</code> 分别表示红色、白色和蓝色。</p><ul></ul><p> </p><p><strong>示例 1:</strong></p><pre><strong>输入:</strong>nums = [2,0,2,1,1,0]<strong><br />输出:</strong>[0,0,1,1,2,2]</pre><p><strong>示例 2:</strong></p><pre><strong>输入:</strong>nums = [2,0,1]<strong><br />输出:</strong>[0,1,2]</pre><p><strong>示例 3:</strong></p><pre><strong>输入:</strong>nums = [0]<strong><br />输出:</strong>[0]</pre><p><strong>示例 4:</strong></p><pre><strong>输入:</strong>nums = [1]<strong><br />输出:</strong>[1]</pre><p> </p><p><strong>提示:</strong></p><ul>	<li><code>n == nums.length</code></li>	<li><code>1 <= n <= 300</code></li>	<li><code>nums[i]</code><code>0</code><code>1</code><code>2</code></li></ul><p> </p><p><strong>进阶:</strong></p><ul>	<li>你可以不使用代码库中的排序函数来解决这道题吗?</li>	<li>你能想出一个仅使用常数空间的一趟扫描算法吗?</li></ul>

## template

```cpp
#include <bits/stdc++.h>
using namespace std;
class Solution
{
public:
	void sortColors(vector<int> &nums)
	{
		int i = 0, j = nums.size() - 1;
		while (i < j)
		{
			if (nums[i] == 0)
			{
				i++;
				continue;
			}
			if (nums[j] != 0)
			{
				j--;
				continue;
			}
			swap(nums[i], nums[j]);
		}
		j = nums.size() - 1;
		while (i < j)
		{
			if (nums[i] == 1)
			{
				i++;
				continue;
			}
			if (nums[j] != 1)
			{
				j--;
				continue;
			}
			swap(nums[i], nums[j]);
		}
	}
};
```

## 答案

```cpp

```

## 选项

### A

```cpp

```

### B

```cpp

```

### C

```cpp

```