目录
题目来源
最近玩OJ赛,发现对算法的理解还需要更加扎实,code能力还可以进一步提升,所以做这样一个算法的系列文章,用于记录学习心得,交流经验,更好地进步和成长。
给定一个包含红色、白色和蓝色、共 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
预知
LeetCode是核心代码模式,所以只需要考虑核心算法,输入由系统自动完成,最后的输出以return返回;
思路
分冶
C++
- class Solution {
- public:
- void sortColors(vector<int>& nums) {
- //红蓝放两边,中间就是白
- int red = 0;
- int blue = nums.size()-1;
- // int temp =0;
- for(int i=0;i
1;i++){ - if(nums[i]==0){
- int temp = nums[red];
- nums[red++] = nums[i];
- nums[i] = temp;
- }
- else if(nums[i]==2){
- int temp = nums[blue];
- nums[blue--] = nums[i];
- nums[i] = temp;
- //防止遗漏 若交换后的数未知,需要再次比较
- i--;
- }
- }
- }
- };
以上就是今天要讲的内容,本文仅仅简单讲解了《75. 颜色分类》这一题,对分冶算法有了一定的了解
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/sort-colors