已解决
99 颜色分类
来自网友在路上 170870提问 提问时间:2023-11-10 17:33:51阅读次数: 70
最佳答案 问答题库708位专家为你答疑解惑
颜色分类
- 题解1 双指针
- 题解2 单指针
给定一个包含红色、白色和蓝色、共
n
个元素的数组
nums
,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。
我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。
必须在不使用库内置的 sort 函数的情况下解决这个问题。
示例 1:
输入:nums = [2,0,2,1,1,0]
输出:[0,0,1,1,2,2]
示例 2:
输入:nums = [2,0,1]
输出:[0,1,2]
提示:
n == nums.length
- 1 <=
n
<= 300 nums[i]
为 0、1 或 2
题解1 双指针
class Solution {
public:void sortColors(vector<int>& nums) {const int s = nums.size();// 0对应的位置,1对应的位置int p0, p1;p0 = p1 = 0;for(int i = 0; i < s; i++){if(1 == nums[i]){swap(nums[i], nums[p1]);p1 ++;}else if(0 == nums[i]){swap(nums[i], nums[p0]);// 1比0多,说明p0位置是1if(p0 < p1){// 把1换回来swap(nums[i], nums[p1]);}// 多了个0,p1的位置也往后指了p0 ++;p1 ++;} }return;}
};
题解2 单指针
class Solution {
public:void sortColors(vector<int>& nums) {const int s = nums.size();// 0对应的位置,1对应的位置int p;p = 0;// 先换0for(int i = 0; i < s; i++){if(0 == nums[i])swap(nums[p++], nums[i]);}// 再换1for(int i = p; i < s; i++){if(1 == nums[i])swap(nums[p++], nums[i]);}return;}
};
查看全文
99%的人还看了
相似问题
- 【洛谷 B2003】输出第二个整数 题解(顺序结构+输入输出)
- 20天拿下华为OD笔试之【模拟】2023B-数大雁【欧弟算法】全网注释最详细分类最全的华为OD真题题解
- Centos(Linux)服务器安装Dotnet8 及 常见问题解决
- 【蓝桥杯选拔赛真题23】C++计算24 第十二届蓝桥杯青少年创意编程大赛C++编程选拔赛真题解析
- [github配置] 远程访问仓库以及问题解决
- 电子学会C/C++编程等级考试2022年06月(一级)真题解析
- [github初学者教程] 分支管理-以及问题解决
- Flume的安装部署及常见问题解决
- 电子学会C/C++编程等级考试2022年03月(一级)真题解析
- 2023年咸阳市《网络建设与运维》赛题解析------四、安全配置
猜你感兴趣
版权申明
本文"99 颜色分类":http://eshow365.cn/6-37354-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!