数组中最小的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);
    }
}


全部评论

相关推荐

吐泡泡的咸鱼:我也工作了几年了,也陆陆续续面试过不少人,就简历来说,第一眼学历不太够,你只能靠你的实习或者论文或者项目经历,然后你没有论文,没有含金量高的比赛和奖项,只能看实习和项目,实习来说,你写的实习经历完全不清楚你想找什么工作?行研?数据分析?且写的太少了,再看项目,这些项目先不说上过大学读过研究生的都知道很水,然后对你想找的岗位有什么帮助呢?项目和实习也完全不匹配啊,你好像在努力将你所有的经历都放在简历里想表现你的优秀,但是对于你想找的岗位来说,有什么用呢?最后只能获得岗位不匹配的评价。所以你需要明白你想要找的岗位要求是什么,是做什么的,比如产品经理,然后再看你的经历里有什么匹配的上这个岗位,或者对这个岗位以及这个岗位所在的公司有价值,再写到你的简历上
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务