题解 | #最小的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);
        }
    }
}

全部评论

相关推荐

淬月星辉:专利是什么?至少描述一下吧,然后把什么计算机二级、普通话这种拉低格调的证书删掉,不然hr以为你没东西写
点赞 评论 收藏
分享
2025-12-15 11:27
门头沟学院 Java
哇哇的菜鸡oc:所有人不要理会,就好了,后面他就知道怎么回事了,只能说有的时候市场都是被宰的人搞坏的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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