优选算法——分治(2):快速选择

🔥近津薪荼: 个人主页 🎬个人专栏: 《近津薪荼的算法日迹》 《Linux操作系统及网络基础知识分享》 《c++基础知识详解》 《c语言基础知识详解》 ✨不要物化,矮化,弱化,钝化自己,保持锋芒,不要停止学习 这个世界上只有两个人真正在注意着你 八岁的你,和八十岁的你, 他们此刻正在注视着你, 一个希望你 勇敢开始 ,一个希望你 不留遗憾


1.上期参考代码

cpp 复制代码
class Solution {
public:
    vector<int> sortArray(vector<int>& nums) {
    
        qsort(nums,0,nums.size()-1);
        return nums;
    }
    void qsort(vector<int>& nums,int left,int right)
    {
        if(left>=right) return;
        int key=(left+right)/2;
        int mid=nums[key];
        int l=left-1,r=right+1,i=left;//初始化三指针
        while(i<r)
        {
            if(nums[i]<mid)swap(nums[++l],nums[i++]);//维护[0,l]
            else if(nums[i]>mid)swap(nums[--r],nums[i]);//维护[r,right]
            else i++;
        }
        qsort(nums,left,l);
        qsort(nums,r,right);
    }
};

2.本期知识点导图

3.本期要讲解的题目是

数组中的第K个最大元素

要点:

  • 时间复杂度不可超过n,普通快排直接out
  • 堆排序也直接out

4.解题

4.思路

目前世界上还不存在能处理任意输入的、时间复杂度严格为 O (N) 的通用排序算法。

所以我们要就题论题,设计算法

上一期我们学了快速排序算法(三路快排),它是他通过数组分块的思想,优化了在有大量重复元素的排序情况,使得此情况下时间复杂度优于普通快排。

总结下来,

4.1三路快排的两个特点:

  • 数组分块
  • 算法性能有针对性

4.2分析现有条件

本题并没有大量的重复元素,貌似没有三路快排的用武之地。

之前dfs剪枝部分学得好的同学,看到这边可能机有点小感觉了,没错

我们就是要利用数组分块的性质来进行剪枝,来达到优化算法的目的。

如图:
在分快的数组中,我们分别计算出a块和b块的长度 ### 要找第k大的元素,可以分成3条路子

当a的长度大于等于k的时候,要找的值一定在区间r,right中。

当k大于a但是小于等于a+b的时候,一定在区间l+1,r-1中,这边直接返回key就得了。(出口)

还有一种情况,只能在c中了。

确定好在哪个区间之后,递归去找就行了。

代码逻辑

思路:利用三路快排数组分块的特点来剪枝

递归逻辑:

  • 子问题是什么:找出本区间的第k大元素
  • 子问题干什么:排序,判断第k大数在哪个区间。(剪枝)
  • 出口:在b中直接返回

5.嗟食

如果小编写的内容对佬有帮助,还请大佬点点三连加关注哦
佬的支持就是我前进的最大动力 ~

期待与佬的再次相遇~

相关推荐
HiDev_8 分钟前
【非标自动化】plc执行顺序问题、扫描周期问题
深度学习·算法·机器学习
高洁0137 分钟前
工信部教考中心证书-人工智能系列本系列
人工智能·python·深度学习·算法
陈王卜1 小时前
Reduce 算子优化笔记
算法
wabs6661 小时前
关于图论【最短路径之Bellman_ford 算法(判断负权回路)|卡码网95.城市间货物运输II的思考】
数据结构·算法·图论·bellman_ford算法·卡码网·判断负权回路
YouonlyliveonceC1 小时前
《大话数据结构》第4章实战:中缀表达式转后缀 + 后缀表达式求值(完整可运行实现)
算法
phoenix@Capricornus1 小时前
从统计决策到贝叶斯估计
人工智能·算法·机器学习
AICDragon2 小时前
1.8%就够了:K3的896个MoE专家,为什么激活率这么低反而是好事?
人工智能·算法
VALENIAN瓦伦尼安教学设备2 小时前
ASHOOTER激光对中仪如何通过颜色确定调整是否合适
数据库·嵌入式硬件·算法
货拉拉技术2 小时前
重塑 Agent 度量衡:基于 LLM-as-a-Judge 的离线评估体系与实践
算法·设计模式
车压2 小时前
从“为什么”理解注意力机制
算法