剑指 Offer 40. 最小的k个数

public int[] getLeastNumbers(int[] arr, int k) {
        //最小的k个数
        Arrays.sort(arr);
        return Arrays.copyOfRange(arr,0,k);
    }

 

 

public int[] getLeastNumbers(int[] arr, int k) {
        int n = arr.length;
        int[] res = new int[k];
        int t = k-1;
        //冒泡排序
        for(int i = 0;i<k;i++){
            int j = 1;
            for(;j<n-i;j++){
                if(arr[j]>arr[j-1]){
                    int temp = arr[j-1];
                    arr[j-1] = arr[j];
                    arr[j] = temp;
                }
            }
            res[t--] = arr[j-1];
        }
        return res;
    }

 

 为啥???????????

public int[] getLeastNumbers(int[] arr, int k) {
        //比第k个数字小的数字都位于左边,比第k个数字大的数都位于右边
        int len = arr.length;
        int i = 0,j = len-1;
        while(i<=k-1 && j>=k-1){
            boolean b = false;
            while (i<k-1){
                if(arr[i]>arr[k-1]){
                    swap(i,k-1,arr);
                    b = true;
                }
                i++;
            }
            while(j>k-1){
                if(arr[j]<arr[k-1]){
                    swap(j,k-1,arr);
                    b = true;
                }
                j--;
            }
            if(!b){
                return Arrays.copyOfRange(arr,0,k);
            }
            i = 0;
            j = len-1;
        }
        return Arrays.copyOfRange(arr,0,k);
    }
    private void swap(int i, int small, int[] nums) {
        int temp = nums[i];
        nums[i] = nums[small];
        nums[small] = temp;
    }

 

posted @ 2020-08-21 09:10  欣姐姐  阅读(83)  评论(0)    收藏  举报