美文网首页
2021-07-21 最小的K个数

2021-07-21 最小的K个数

作者: hlchengzi | 来源:发表于2021-07-21 01:42 被阅读0次

就是用快排,在快排的时候如果超过k,后面的就不进行排序

public ArrayList<Integer> GetLeastNumbers_Solution(int [] input, int k) {
        // 快排简化
        quickSort(input,0,input.length-1,k);
        
        ArrayList list = new ArrayList();
        for(int i = 0;i<k;i++){
            list.add(input[i]);
        }
        return list;
    }
    //右边的是数组最后一个的下表
    private void quickSort(int[] nums,int start,int end,int k){
        try {
            if(start>=end){
                return;
            }
            if(start+1 == end){
                if(nums[start]>nums[end]){
                    swap(nums,start,end);
                }
                return;
            }
            int mid = nums[start];
            List<Integer> left = new ArrayList<>();
            List<Integer> right = new ArrayList<>();
            for (int i = start+1; i <= end; i++) {
                if(nums[i]< mid){
                    left.add(nums[i]);
                }
                else {
                    right.add(nums[i]);
                }
            }
            int midNum = start+left.size();
            
            int index = start;
            for (int i = 0; i < left.size(); i++) {
                nums[index] = left.get(i);
                index++;
            }
            nums[index] = mid;
            index++;
            for (int i = 0; i < right.size(); i++) {
                nums[index] = right.get(i);
                index++;
            }
            quickSort(nums,start,midNum,k);
            if (midNum <= k) {
                quickSort(nums, midNum + 1, end,k);
            }
        } catch (Error e) {
            System.out.println("Exce:"+start +"  "+ end);
        }
    }
    
    public void swap(int[] nums,int left,int right){
        int temp = left;
        left = right;
        right = temp;
    }

相关文章

  • 2021-07-21 最小的K个数

    就是用快排,在快排的时候如果超过k,后面的就不进行排序

  • 算法-数组(三)

    最小的k个数 求子数组的最大和 把数组排成最小的数字 1.最小的k个数 问题描述:输入n个数字,找到数组中最小的k...

  • 最小的k个数

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

  • 最小的k个数

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

  • 最小的K个数

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

  • 最小的k个数

    参考: [1] https://www.nowcoder.com/questionTerminal/6a296eb...

  • 最小的K个数

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

  • 最小的K个数

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

  • 最小的k个数

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

  • 最小的k个数

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

网友评论

      本文标题:2021-07-21 最小的K个数

      本文链接:https://www.haomeiwen.com/subject/unpdmltx.html