您的位置:首页 > 房产 > 家装 > 网页制作与设计专业_自媒体是干什么的_软文营销经典案例优秀软文_高端定制网站建设公司

网页制作与设计专业_自媒体是干什么的_软文营销经典案例优秀软文_高端定制网站建设公司

2025/1/10 20:53:06 来源:https://blog.csdn.net/linshantang/article/details/143337430  浏览:    关键词:网页制作与设计专业_自媒体是干什么的_软文营销经典案例优秀软文_高端定制网站建设公司
网页制作与设计专业_自媒体是干什么的_软文营销经典案例优秀软文_高端定制网站建设公司

一、题目

        给定一个包含红色、白色和蓝色,一共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

二、解题思路

        数组中仅包含三种数字:0、1、2。我们只需将 0 移至前面,将 3 移至后面即可。难度并非很大。下面以示例一为例,来看如下动图。

三、代码实现

#include <iostream>
#include <vector>using namespace std;// 交换数组中的两个数字
void swap(vector<int>& nums, int i, int j) {int tmp = nums[i];nums[i] = nums[j];nums[j] = tmp;
}// 三指针排序
void sortColors(vector<int>& nums) {// 0的右边界int left = 0;// 2的左边界int right = nums.size() - 1;// 指向当前数字int index = 0;while (index <= right) {if (nums[index] == 0) {// 如果是0,就往前面移swap(nums, left++, index++);} else if (nums[index] == 1) {index++;} else if (nums[index] == 2) {// 如果是2就往后面移swap(nums, right--, index);}}
}int main() {vector<int> nums = {2, 0, 2, 1, 1, 0};sortColors(nums);for (int num : nums) {cout << num << " ";}cout << endl;return 0;
}

版权声明:

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

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