码迷,mamicode.com
首页 > 其他好文 > 详细

最小的K个数

时间:2018-12-30 02:51:52      阅读:124      评论:0      收藏:0      [点我收藏+]

标签:tar   .com   语言   array   pre   ret   start   number   list   

题目描述:输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。

实现语言:Java

import java.util.ArrayList;
public class Solution {
    public ArrayList<Integer> GetLeastNumbers_Solution(int [] input, int k) {
        int size=input.length;
        ArrayList<Integer> res=new ArrayList<Integer>();
        if(size==0||input==null||size<k||k<=0){
            return res;
        }
        int start=0;
        int end=size-1;
        int index=partition(input,start,end);
        while(index!=k-1){
            if(index>k-1){
                end=index-1;
                index=partition(input,start,end);
            }else if(index<k-1){
                start=index+1;
                index=partition(input,start,end);
            }
        }
        for(int i=0;i<k;++i){
            res.add(input[i]);
        }
        return res;
    }
    private int partition(int[] input,int low,int high){
        int pivot=input[low];
        while(low<high){
            while(low<high&&input[high]>=pivot){
                --high;
            }
            input[low]=input[high];
            while(low<high&&input[low]<=pivot){
                ++low;
            }
            input[high]=input[low];
        }
        input[low]=pivot;
        return low;
    }
}

 实现语言:Java

import java.util.ArrayList;
import java.util.PriorityQueue;
import java.util.Comparator;
public class Solution {
    public ArrayList<Integer> GetLeastNumbers_Solution(int [] input, int k) {
        int size=input.length;
        ArrayList<Integer> res=new ArrayList<Integer>();
        if(size==0||input==null||size<k||k<=0){
            return res;
        }
        PriorityQueue<Integer> maxHeap=new PriorityQueue<Integer>(k,new Comparator<Integer>(){
            @Override
            public int compare(Integer o1,Integer o2){
                return o2.compareTo(o1);
            }
        });
        for(int i=0;i<size;++i){
            if(maxHeap.size()!=k){
                maxHeap.offer(input[i]);
            }else{
                if(maxHeap.peek()>input[i]){
                    maxHeap.poll();
                    maxHeap.offer(input[i]);
                }
            }
        }
        for(Integer num:maxHeap){
            res.add(num);
        }
        return res;
    }
}

 

最小的K个数

标签:tar   .com   语言   array   pre   ret   start   number   list   

原文地址:https://www.cnblogs.com/xidian2014/p/10198271.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!