题解 | #最小的K个数#

最小的K个数

https://www.nowcoder.com/practice/6a296eb82cf844ca8539b57c23e6e9bf

import java.util.ArrayList;

public class Solution {
    ArrayList<Integer> arrayList = new ArrayList();
    public ArrayList<Integer> GetLeastNumbers_Solution(int [] input, int k) {
        if(input.length>0){
        //先快排,再获取值
        qsort(input,0,input.length-1);
        for(int i2= 0;i2<k;i2++)
            {
                arrayList.add(input[i2]); 
            }
            return arrayList;}
        else{
            return arrayList;
        }
    }
public void qsort(int []a,int l,int r){
        int mid = a[l];
        int left = l;
        int right = r;
        int temp =0;
        int i=0;
        while(left<right){
             //右边找到比a[l]小的第一个数;和a[l]相等的数不移动,比mid大的数不断后移
             //先right--能确保left和right相等时a[left]<=a[mid],上一轮已经比较替换
            while(a[right]>=mid&&left<right){
                right--;
            }
            //左边找到比a[l]大的第一个数;和a[l]相等的数不移动,比mid小的数不断前移
            while(a[left]<=mid&&left<right){
                left++;
            }
            temp = a[left];
            a[left] = a[right];
            a[right] = temp;
               
        }
        //最左边的数a[l]和a[left]替换,一次递归只确定一个数a[l]的位置
        temp = a[left];
        a[left] = a[l];
        a[l] = temp;

        if(left>l){
            qsort(a,l,left-1);
        }
        if(right<r){
            qsort(a,right+1,r);
        }
    }
}

全部评论

相关推荐

10-11 17:45
门头沟学院 Java
走吗:别怕 我以前也是这么认为 虽然一面就挂 但是颇有收获!
点赞 评论 收藏
分享
勤奋努力的椰子这就开摆:美团骑手在美团工作没毛病
投递美团等公司10个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务