寻找第K大(NC88/考察次数Top7/难度中等)

该博客介绍如何应用快速排序的思路解决找到整数数组中第K大数的问题。给出一个示例输入数组 `[1, 3, 5, 2, 2]`,大小 `5` 和 `K = 3`,解决方案返回第3大的数,即 `2`。博客作者提供了C++实现,并承诺后续会发布更多算法题的详细讲解视频,帮助读者提升技能,目标是顺利进入大厂工作。" 79999001,7332212,系统分析与设计:用例建模与业务流程,"['系统分析', '设计', 'UML', '需求分析', '软件工程']
摘要由CSDN通过智能技术生成

描述:
有一个整数数组,请你根据快速排序的思路,找出数组中第K大的数。
给定一个整数数组a,同时给定它的大小n和要找的K(K在1到n之间),请返回第K大的数,保证答案存在。

示例1
输入:
[1,3,5,2,2],5,3
返回值:
2
(题目来自牛客网)

用C++实现如下

class Solution {
public:
    int findKth(vector<int> a, int n, int K) {
        // write code here
        //思路1,进行库函数sort排序后进行求解
        vector<int> tmp = a;
        sort(tmp.begin(), tmp.end());                  //使用库函数sort排序
        int res = tmp[n-1];
        for(int i = n-1; i>0; --i)                     //遍历找值,找到第K大值
        {
            if(tmp[i]>tmp[i-1])
            {
                if(K == 1)
                {
                    return tmp[i];
                }
                K--;
            }
        }
        return res;
      
//        //思路2,使用快速排序二分查找来处理,利用快速排序的特点(找出某值的合适
          //位置,左边所有的值比他都小,右边的值比他都大)
//     
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值