最小的K个数(NC119/考察次数Top5/难度中等)

描述:
给定一个数组,找出其中最小的K个数。例如数组元素是4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4。如果K>数组的长度,那么返回一个空的数组。
示例1
输入:
[4,5,1,6,2,7,3,8],4
返回值:
[1,2,3,4]
(题目来自牛客网)

用C++实现如下

class Solution {
public:
    vector<int> GetLeastNumbers_Solution(vector<int> input, int k) {
        
//         //思路1,先使用库函数sort进行排序,然后进行求解
//         vector<int> res;
//         if(k<=0 || k>input.size())             //异常边境情况
//             return res;
//         sort(input.begin(), input.end());      //使用库函数进行排序
//         for(int i=0; i<k; ++i)
//         {
//             res.push_back(input[i]);           //求出结果
//         }
//         return res;
        
        
        
        //思路2,使用快排加二分法(二分的目的主要是没必要排没有意义的一侧了)
        vector<int> res;
        if(k<=0 || k>input.size())         //异常边境情况
            return res;
        quicksort(input, 0, n-1, k);       //输入的数组,左边界,右边界,以及最小的k个数的k值
        vector<int> res;
        for(int i = 0; i<k; ++i)
        {
            res.push_back(input[i]);
        }
        return res;
    }
    
    //快排填坑法,注意是输入的数组的引用(因为有变动)
    void quicksort(vector<int> &input, int left, int right, int k)
    {
        if(left >= right)                        //递归结束条件
            return;
        int i = left;
        int j = right;
        int temp = input[i];                     //挖出坑
        while(i<j)                               //一直填坑,直到靠拢(i=j);
        {
            while(i<j && input[j]>=temp)
                j--;
            input[i] = input[j];
            while(i<j && input[i]<=temp)
                i++;
            input[j]=input[i];
        }
        input[i]=temp;                           //把temp值赋i和j相遇时的坑位
        if(i>=k)                                 //i在比较靠后的位置,则排序前一半即可
        {
            quicksort(input, left, i-1, k);
        }else{                                   //否则两边都需要quicksort
            quicksort(input, left, i-1, k);
            quicksort(input, i+1, right, k);
        }
    }
};

纯手撕代码,如果觉得内容不错麻烦点个赞,后面陆续配上Top100算法题通俗易懂的讲解视频,可以花两个月时间完全掌握,进大厂不是梦,转行狗亲测!

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
用友NC Portal/File是用友集团针对企业管理需求推出的一套云端平台和文件管理系统。通过使用该系统,企业可以实现多种功能,包括企业门户、文件管理与协作、信息发布与交流等。 首先,用友NC Portal提供了一个企业门户,通过该门户,员工可以方便地获取企业内部的各种信息和服务。员工可以登录系统,查看个人的工作任务、日程安排、考勤记录等,同时还可以浏览公司公告、文档库、内部新闻等企业发布的信息。 其次,用友NC File是一个文件管理与协作的平台。企业可以将各类文件上传至系统中进行存储和管理,包括办公文档、图纸、合同等。该系统支持多人协同编辑和共享文件,有效地提高了团队协作的效率。同时,系统还提供文件版本管理功能,可以追踪文件的修改历史,方便查看和比较不同版本的文件内容。 此外,用友NC Portal/File还具备信息发布与交流的功能。企业可以通过系统发布公司公告、通知等消息,方便员工了解企业最新动态。此外,系统还支持员工之间的留言和讨论,员工可以在系统中进行信息交流和合作,提升团队沟通效率。 总的来说,用友NC Portal/File是一款功能强大的云端平台和文件管理系统。它帮助企业实现了企业门户、文件管理与协作、信息发布与交流的多种功能,提高了企业的管理效率和团队的协作效能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值