复习 - JZ29 最小的K个数

最小的K个数

https://www.nowcoder.com/practice/6a296eb82cf844ca8539b57c23e6e9bf?tpId=13&&tqId=11182&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking

因为是最小的k个数 但是数组从零开始算 所以应该是index最小为k-1的数
快排思想

import java.util.ArrayList;

public class Solution {
    int target = -1;
    public ArrayList<Integer> GetLeastNumbers_Solution(int [] input, int k) {
        ArrayList<Integer> res = new ArrayList<Integer>();
        partitoin(input,0,input.length-1,k-1);

        for(int i=0; i<input.length && k>0; i++) {
            if(input[i] <= target) {res.add(input[i]); k--;}
        }
        return res;
    }

    public void partitoin(int [] nums, int l, int r, int k){
        if(l>r) return;
        int i = l;
        int j = r;
        int temp = nums[l];

        while(i<j){
            while(i<j && nums[j]>=nums[l]) j--;
            while(i<j && nums[l]>=nums[i]) i++;
            temp = nums[i];
            nums[i] = nums[j];
            nums[j] = temp;
        }
        nums[i] = nums[l];
        nums[l] = temp;

        if(i == k) target = nums[i];
        else if(i>k) partitoin(nums,l,i-1,k);
        else partitoin(nums,i+1,r,k);        
    }
}
全部评论

相关推荐

点赞 评论 收藏
转发
点赞 收藏 评论
分享
牛客网
牛客企业服务