力扣HOT100之技巧:75. 颜色分类

这道题实际上就是让我们不用sort()函数来实现对原数组的排序,这里我直接使用快速排序对原数组进行排序了,也是复习一下基于快慢指针的快速排序写法。面试手撕快排的思路参考这个视频

用时击败100%,还行。下面直接贴代码。

cpp 复制代码
class Solution {
public:
    void sortColors(vector<int>& nums) {
        quicksort(nums, 0, nums.size() - 1);
    }
    void quicksort(vector<int>& nums, int begin, int end){
        if(begin >= end) return ;   //只有一个元素,无需排序,直接返回
        //排序主逻辑
        int pivot = nums[end];
        int slow = begin, fast = begin; 
        while(fast < end){
            if(nums[fast] > pivot)
                fast++;
            else{
                swap(nums[slow], nums[fast]);
                slow++;
                fast++;
            }
        }
        swap(nums[slow], nums[end]);  //将枢轴移动到正确位置
        quicksort(nums, begin, slow - 1);   //对枢轴左侧排序
        quicksort(nums, slow + 1, end);   //对枢轴右侧排序
    }
};

但是,使用快速排序无法通过一次扫描就将整个数组排序完成,还可以使用更高效的方法。我感觉灵神的题解也写得挺通俗易懂的,感觉灵神的题解写的特别好,还是建议去看他的题解

以下是根据灵神的题解写出来的代码。

cpp 复制代码
class Solution {
public:
    void sortColors(vector<int>& nums) {
        int p0 = 0, p1 = 0;
        for(int i = 0; i < nums.size(); i++){
            int temp = nums[i];
            nums[i] = 2;   
            if(temp <= 1){
                nums[p1] = 1;
                p1++;
            }
            if(temp == 0){
                nums[p0] = 0;
                p0++;
            }
        }
    }
};
相关推荐
h_a_o777oah5 分钟前
状态机+划分型 DP :深度解析K-划分问题下 DP 状态的转移逻辑(洛谷P2679 P2331 附C++代码)
c++·算法·动态规划·acm·状态机dp·划分型dp·滚动数组优化
05候补工程师12 分钟前
从算法理想向工程现实的跨越:SLAM 核心架构、思维误区与 Nav2 实战避坑指南
人工智能·算法·安全·架构·机器人
手写码匠1 小时前
Android 17 适配实战指南:新特性解读、隐私变更与迁移全攻略
人工智能·深度学习·算法·aigc
珊瑚里的鱼2 小时前
leetcode42雨水
算法·leetcode
水木流年追梦2 小时前
大模型入门-大模型的推理策略
开发语言·python·算法·正则表达式·prompt
生成论实验室2 小时前
用事件关系网络重新理解AI(三):激活函数、微调与元学习
人工智能·学习·算法·语言模型·可信计算技术
Narv工程师2 小时前
嵌入式机器人控制器算力评估:从DMIPS到WCET的完整指南
人工智能·算法·机器学习
蒟蒻的贤2 小时前
实训1227
算法
liulilittle2 小时前
TCP UCP:基于卡尔曼滤波的BBR增强型拥塞控制算法
linux·网络·c++·tcp/ip·算法·c·通讯
LCG元2 小时前
RAG - 大模型检索增强生成深度解析:本地知识库 / 企业级落地优化配置
人工智能·算法