算法練習--最小K個數

題目:

設計一個算法,找出數組中最小的k個數。以任意順序返回這k個數均可。

示例:

輸入: arr = [1,3,5,7,2,4,6,8], k = 4
輸出: [1,2,3,4]

個人思路:

其實就是排序,本人用來系統給的排序函數、快速排序(Mysort1)、堆排序(Mysort2)三種方法

代碼:

class Solution {
    public int[] smallestK(int[] arr, int k) {
        // Arrays.sort(arr);
        // Mysort1(arr,0,arr.length-1);
        Mysort2(arr);
        int[] re=new int[k];
        for(int i=0;i<k;i++){
            re[i]=arr[i];
        }
        return re;
    }
    public void Mysort2(int[] arr){
        if(arr.length==0){
            return;
        }
        int size=arr.length-1;
        for(int i=0;i<arr.length;i++){
            insert(arr,i);
        }
        swap(arr,0,size--);
        while(size>0){
            heapfiy(arr,0,size);
            swap(arr,0,size--);
        }
    }
    public void insert(int[] arr,int index){
        while(arr[index]>arr[(index-1)/2]){
            swap(arr,index,(index-1)/2);
            index=(index-1)/2;
        }
    }
    public void heapfiy(int[] arr,int index,int size){
        int left=index*2+1;
        while(left<=size){
            int lagest=left+1<=size&&arr[left+1]>arr[left]?left+1:left;
            lagest=arr[lagest]>arr[index]?lagest:index;
            if(lagest==index){
                break;
            }
            swap(arr,index,lagest);
            index=lagest;
            left=index*2+1;
        }
    }
    // public void Mysort1(int[] arr,int start,int end){
    //     if(start<end){
    //         int less=start-1;
    //         int more=end;
    //         int index=start;
    //         while(index<more){
    //             if(arr[index]<arr[end]){
    //                 swap(arr,++less,index++);
    //             }else if(arr[index]>arr[end]){
    //                 swap(arr,--more,index);
    //             }else{
    //                 index++;
    //             }
    //         }
    //         swap(arr,more,end);
    //         Mysort(arr,start,less);
    //         Mysort(arr,more+1,end);
    //     }
    // }
    public void swap(int[] arr,int l,int r){
        int a=arr[l];
        arr[l]=arr[r];
        arr[r]=a;
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章