元素个数为K的大顶堆或者快速选择

最小的K个数

http://www.nowcoder.com/questionTerminal/6a296eb82cf844ca8539b57c23e6e9bf

请首先做参数合法性判断:k<=0或者k>input.length时,直接返回空

topK,先添加,当元素个数>k时,移除堆顶元素。

    /**
     *输入n个整数,找出其中最小的K个数。
     * 例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4。
     * @param input n个整数
     * @param k K
     * @return 其中最小的K个数
     */
    public ArrayList<Integer> GetLeastNumbers_Solution(int [] input, int k) {
        //首先请做合法性判断
        if(input==null||input.length==0||k<=0||k> input.length){
            return new ArrayList<>(0);
        }
        PriorityQueue<Integer> pq=new PriorityQueue<>(k,(a,b)->b.compareTo(a));
        for(int num:input){
            pq.add(num);
            if(pq.size()>k){
                pq.remove();
            }
        }
        return new ArrayList<>(pq);
        //或者,使用quickSelect。直接 return quickSelect(input, 0, input.length - 1, k - 1);


    }

    public ArrayList<Integer> quickSelect(int[] nums,int left,int right,int k){
        int pivotIndex=partation(nums,left,right);
        if(pivotIndex==k){
            ArrayList<Integer> res=new ArrayList<>();
            for(int i=0;i<=k;i++){
                res.add(nums[i]);
            }
            return res;
        }
        return pivotIndex>k?quickSelect(nums,left,pivotIndex-1,k):quickSelect(nums,pivotIndex+1,right,k);
    }

    private int partation(int[] nums,int left,int right){
        int pivot=nums[left];
        while (left<right){
            while (left<right&&pivot<=nums[right]){
                right--;
            }
            nums[left]=nums[right];
            while (left<right&&nums[left]<=pivot){
                left++;
            }
            nums[right]=nums[left];
        }
        nums[left]=pivot;
        return left;
    }

全部评论

相关推荐

屌丝逆袭咸鱼计划:心态摆好,man,晚点找早点找到最后都是为了提升自己好进正职,努力提升自己才是最关键的😤难道说现在找不到找的太晚了就炸了可以鸡鸡了吗😤早实习晚实习不都是为了以后多积累,大四学长有的秋招进的也不妨碍有的春招进,人生就这样
点赞 评论 收藏
分享
白火同学:能。我当初应届沟通了1200,收简历50,面试10左右吧,加油投吧
投了多少份简历才上岸
点赞 评论 收藏
分享
就前几天旅游的时候,打开抖音就经常刷到这类视频:以前是高学历学生、老师、主持人,现在做着团播、擦边主播的工作,以及那些经过精心包装的“职业转型”故事——从铺天盖地的VLOG到所谓的“04年夜场工作日记”,这些内容在初中升学、高考放榜等关键时间节点持续发酵。可以说非常直接且精准地在潜移默化地影响着心智尚未成熟的青少年,使其对特殊行业逐渐脱敏。那我就想问了:某些传播公司、平台运营者甚至某些夜场的老板,你们究竟在传递怎样的价值观?点开那些视频,评论区里也是呈现明显的两极分化:一种是​​经济下行论​​:“现在就业市场已经艰难到这种程度了吗?”​​一种是事实反驳派​​:这些创作者往往拥有名校背景,从事着...
牛客刘北:被环境教育的,为了能拿到足够的钱养活自己,不甘心也得甘心,现在的短视频传播的思想的确很扭曲,但是很明显,互联网玩上一年你就能全款提A6,但你全心全意不吃不喝工作一年未必能提A6,但是在高考中考出现这个的确很扭曲,在向大家传播“不上学,玩互联网也可以轻松年入百万”,不是人变了,是社会在变
预测一下26届秋招形势
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务