您的位置:首页 > 科技 > IT业 > 南宁小程序制作_手机网页设计尺寸_营销策划36计_制作网站需要的技术与软件

南宁小程序制作_手机网页设计尺寸_营销策划36计_制作网站需要的技术与软件

2025/2/28 4:28:17 来源:https://blog.csdn.net/YQ20210216/article/details/145535896  浏览:    关键词:南宁小程序制作_手机网页设计尺寸_营销策划36计_制作网站需要的技术与软件
南宁小程序制作_手机网页设计尺寸_营销策划36计_制作网站需要的技术与软件

文章目录

  • 1.题目
  • [75. 颜色分类](https://leetcode.cn/problems/sort-colors/description/?envType=problem-list-v2&envId=qVg9d5vs)
  • 2.思路
  • 3.代码


1.题目

75. 颜色分类

给定一个包含红色、白色和蓝色、共 n 个元素的数组 nums ,**原地 **对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。

我们使用整数 012 分别表示红色、白色和蓝色。

必须在不使用库内置的 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`

2.思路

  1. 定义两个指针
    • left:指向数组的最左边,表示 0(红色)的边界。
    • right:指向数组的最右边,表示 2(蓝色)的边界。
  2. 遍历数组
    • 如果当前数字是 0,就把它放到 left 的位置,然后 left 向右移动。
    • 如果当前数字是 2,就把它放到 right 的位置,然后 right 向左移动。
    • 如果当前数字是 1,就跳过,继续遍历。

注意:left 初始化为-1是因为最开始没有安排好第一个位置,所以不好初始化为0,right同理

3.代码

class Solution {
public:void sortColors(vector<int>& nums) {// 定义两个指针,left 指向 0 的边界,right 指向 2 的边界int left = -1, right = nums.size();// tmp 是当前遍历的位置int tmp = 0;// 遍历数组while (tmp < right) {if (nums[tmp] == 0) {// 如果当前数字是 0,把它放到 left 的位置++left;  // left 向右移动swap(nums[tmp], nums[left]);  // 交换当前数字和 left 位置的数字++tmp;  // 继续遍历下一个数字} else if (nums[tmp] == 2) {// 如果当前数字是 2,把它放到 right 的位置--right;  // right 向左移动swap(nums[tmp], nums[right]);  // 交换当前数字和 right 位置的数字// 注意:这里不需要移动 tmp,因为交换后的数字可能是 0 或 1,需要再次检查} else {// 如果当前数字是 1,直接跳过++tmp;  // 继续遍历下一个数字}}}
};

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com