当前位置:首页 > 编程笔记 > 正文
已解决

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%的人还看了

猜你感兴趣

版权申明

本文"99 颜色分类":http://eshow365.cn/6-37354-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!