力扣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++;
            }
        }
    }
};
相关推荐
前端小刘哥7 分钟前
现场直播的技术革新者:视频直播点播平台EasyDSS在现场直播场景中的技术应用
算法
violet-lz21 分钟前
数据结构八大排序:堆排序-从二叉树到堆排序实现
数据结构·算法
十八岁讨厌编程31 分钟前
【算法训练营 · 补充】LeetCode Hot100(上)
算法·leetcode
CandyU236 分钟前
C++ 学习 —— 02 - 排序算法
c++·学习·排序算法
一条星星鱼1 小时前
从0到1:如何用统计学“看透”不同睡眠PSG数据集的差异(域偏差分析实战)
人工智能·深度学习·算法·概率论·归一化·睡眠psg
浮灯Foden1 小时前
算法-每日一题(DAY18)多数元素
开发语言·数据结构·c++·算法·leetcode·面试
小欣加油1 小时前
leetcode 844 比较含退格的字符串
算法·leetcode·职场和发展
小龙报1 小时前
《算法每日一题(1)--- 第31场蓝桥算法挑战赛》
c语言·开发语言·c++·git·算法·学习方法
llz_1121 小时前
五子棋小游戏
开发语言·c++·算法
violet-lz1 小时前
数据结构八大排序:归并排序-原理+C语言实现+优化+面试题
c语言·数据结构·排序算法