求topK思路

1 完全排序
2 堆排,冒泡排,快排(获取当p的值等于k即求得,有点类似二分)
3 优先队列priorityQueue,保存一个k大小的优先队列
4 如果K较小,可以定义K个数(类似最大,次大,次小,最小),然后遍历一次数组,根据遍历得的数大小,调整K个数的大小

附上快排思想求topK代码

	static int k = 2;
    static void sort(Integer[] arr,int l,int r){
        if (l>r){
            return;
        }
        int p = getP(arr,l,r);
        if (p==k-1){
            System.out.println(arr[p]);
        }else if (p>k-1){
            sort(arr,l,p-1);
        }
        else{
            sort(arr,p+1,r);
        }
    }
    static int getP(Integer[] arr,int l,int r){
        int target = arr[l];
        int index = l+1;
        for(int i = l+1;i<=r;i++){
            if (arr[i]<target){
                swap(arr,index++,i);
            }
        }
        swap(arr,index-1,l);
        return index-1;
    }
    static void swap(Integer[] arr,int l,int r){
        int temp = arr[l];
        arr[l] = arr[r];
        arr[r] = temp;
    }

你可能感兴趣的:(算法)