颜色分类--力扣

Posted 穿迷彩服的鲨鱼

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了颜色分类--力扣相关的知识,希望对你有一定的参考价值。


前言

给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。
此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。


一、示例

示例 1:

输入:nums = [2,0,2,1,1,0]
输出:[0,0,1,1,2,2]
示例 2:

输入:nums = [2,0,1]
输出:[0,1,2]
示例 3:

输入:nums = [0]
输出:[0]
示例 4:

输入:nums = [1]
输出:[1]

提示:

n == nums.length
1 <= n <= 300
nums[i] 为 0、1 或 2

二、代码解析

1.sort()

代码如下(示例):

void sortColors(vector<int>& nums)
{
    sort(nums.begin(), nums.end());
}

结果

在这里插入图片描述

2.进阶

你可以不使用代码库中的排序函数来解决这道题吗?
你能想出一个仅使用常数空间的一趟扫描算法吗?

代码如下(示例):

void sortColors(vector<int>& nums)
{
	int n = nums.size();
	int index = 0;
	for (int i = 0; i < n; ++i)
	{
		if (nums[i]==0)
		{
			swap(nums[i], nums[index]);
			index++;
		}
	}
	for (int i = index; i < n; ++i)
	{
		if (nums[i]==1)
		{
			swap(nums[i], nums[index]);
			index++;
		}
	}
}

结果

在这里插入图片描述

3.测试

代码如下(示例):

#include <iostream>
#include<vector>
#include<algorithm>
using namespace std;

void sortColors(vector<int>& nums)
{
	int n = nums.size();
	int index = 0;
	for (int i = 0; i < n; ++i)
	{
		if (nums[i]==0)
		{
			swap(nums[i], nums[index]);
			index++;
		}
	}
	for (int i = index; i < n; ++i)
	{
		if (nums[i]==1)
		{
			swap(nums[i], nums[index]);
			index++;
		}
	}
}


int main()
{
	vector<int> nums = { 2,0,2,1,1,0 };
	sortColors(nums);
	for (int i = 0; i < nums.size(); i++)
	{
		cout << nums[i] << " ";
	}
    return 0;
}

结果

在这里插入图片描述


总结

在这里插入图片描述

以上是关于颜色分类--力扣的主要内容,如果未能解决你的问题,请参考以下文章

力扣刷题:颜色分类(java实现)

leetcode75之颜色分类

三指针(三指针排序只有三种元素的数组)--12--三指针--颜色分类

LeetCode #75 颜色分类

2021-12-24:划分字母区间。 字符串 S 由小写字母组成。我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。返回一个表示每个字符串片段的长度的列表。 力扣763。某大厂面试

在片段中设置文本颜色