目录
题目来源
第一站 LeetCode 新手村
前言
最近玩OJ赛,发现对算法的理解还需要更加扎实,code能力还可以进一步提升,所以做这样一个算法的系列文章,用于记录学习心得,交流经验,更好地进步和成长。
75. 颜色分类
题目描述
给定一个包含红色、白色和蓝色、共 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<blue+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