颜色分类--力扣
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;
}
结果
总结
以上是关于颜色分类--力扣的主要内容,如果未能解决你的问题,请参考以下文章
三指针(三指针排序只有三种元素的数组)--12--三指针--颜色分类
2021-12-24:划分字母区间。 字符串 S 由小写字母组成。我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。返回一个表示每个字符串片段的长度的列表。 力扣763。某大厂面试