剑指Offer40 最小的k个数

Posted 小布丁value

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指Offer40 最小的k个数相关的知识,希望对你有一定的参考价值。


代码思路:先排序,在输出
冒泡排序:

class Solution {
    public int[] getLeastNumbers(int[] arr, int k) {
         //排序,趟数
        for(int i=0;i<arr.length-1;i++){
            //两数进行比较
            for(int j=0;j<arr.length-1-i;j++){
                if(arr[j]>arr[j+1]){
                    int temp=arr[j];
                    arr[j]=arr[j+1];
                    arr[j+1]=temp;
                }

            }
        }
        int[] res= new int[k];
        for(int i=0;i<res.length;i++){
            res[i]=arr[i];
        }
        return  res;

    }
}


效率太低了哈
方法二:先选择排序再输出

class Solution {
      public static int[] getLeastNumbers(int [] arr,int k){
        QuickSort(arr);
        int[] res=new int[k];
        for(int i=0;i<res.length;i++){
            res[i]=arr[i];
        }
        return res;
    }
    public static void QuickSort(int [] array){
        if(array==null||array.length<0) return;
        Quick(array,0,array.length-1);
    }
    public static void Quick(int [] array,int low,int high){
        if(low==high){
            return;
        }
       int mar= partition(array,low,high);
        if(mar-1>low){
            Quick(array,low,mar-1);
        }
        if (mar+1<high){
            Quick(array,mar+1,high);
        }
    }
    //一次快排的过程
    public static  int partition(int [] array,int low,int high){
        int mar=array[low];
        while(low<high){
            //从后往前找比它小的
            while (low<high && array[high]>=mar){
                high--;
            }
            if(low==high){
                break;
            }
            if(array[high]<mar){
                array[low]=array[high];
            }
            //从前往后找比他大的
            while(low<high&&array[low]<=mar){
                low++;
            }
            if(low==high){
                break;
            }
            if(array[low]>mar){
                array[high]=array[low];
            }
        }
        array[low]=mar;
        return  low;
    }
}

以上是关于剑指Offer40 最小的k个数的主要内容,如果未能解决你的问题,请参考以下文章

剑指offer--40最小的k个数

剑指 Offer 40. 最小的k个数

剑指 Offer 40. 最小的k个数

剑指Offer40 最小的k个数

LeetCode(剑指 Offer)- 40. 最小的 k 个数

剑指Offer-时间效率面试题40:最小的k个数