数组中最小的K个数

最小的K个数

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

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

思路分析:用快速排序算法 排好顺序之后,再取出前K个数就是最小的数了
                 
import java.util.*;
public class Solution {
    public ArrayList<Integer> GetLeastNumbers_Solution(int [] input, int k) {
        
        ArrayList<Integer> list = new ArrayList<>();
        if(k > input.length){
            return list;
        }
        
        //Arrays.sort(input);
        quickSort(input, 0, input.length-1);
        
        for(int i=0; i<k; i++){
            list.add(input[i]);
        }
        
        return list;
    }
    
    
    private void quickSort(int[] a, int begin, int end){
        if(begin > end || a.length == 0 || a == null){
            return;
        }
        
        int num = a[begin];
        int i = begin, j = end;
        while(i!=j){
            
            //比较数组最后的值与参考数的大小 如果大于参考数值 则将指针向前移
            while(a[j] >= num && i<j){
                j--;
            }
            
            while(a[i] <= num && i<j){
                i++;
            }
            
            //执行到这里i索引上的值大于参考值 索引j上的值小于参考值 故而将i、j上的值互换
            if(i<j){
               int t = a[j]; 
               a[j] = a[i];
               a[i] = t;
            }
        }
        
        a[begin] = a[i];  //将参考值和a[i]进行互换
        a[i] = num;
        quickSort(a, begin, i-1);
        quickSort(a, i+1, end);
    }
}


全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

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