欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

TopK問題有幾種解決辦法?

TopK問題的描述:

指定n個數(shù)字,找出其中最大的k個數(shù),這就是經(jīng)典的TopK問題

創(chuàng)新互聯(lián)公司主營巴里坤哈薩克網(wǎng)站建設的網(wǎng)絡公司,主營網(wǎng)站建設方案,app軟件開發(fā)公司,巴里坤哈薩克h5小程序制作搭建,巴里坤哈薩克網(wǎng)站營銷推廣歡迎巴里坤哈薩克等地區(qū)企業(yè)咨詢

解決方法一:全局排序
  • 將n個數(shù)進行全排序,取出最大的k個,即是所需的結(jié)果
  • 代碼:
    public int[] topK(int[] array, int k) {
        Arrays.sort(array);
        return Arrays.copyOfRange(array, array.length - k, array.length);
    }
  • 時間復雜度是O(N*logN)
解決方法二:局部排序
  • 其實沒有必要將所有的元素都排序,只需要將前k個最大的值排序出來就可以停止排序,得到的k個值就是需要的結(jié)果
  • 代碼
    public int[] topK(int[] array, int k) {
        for(int i = 0; i < k; i++) {
            for(int j = array.length - 1; j > 0; j--) {
                if(array[j] > array[j - 1]) {
                    int tmp = array[j];
                    array[j] = array[j - 1];
                    array[j - 1] = tmp;
                }
            }
        }
    }
  • 時間復雜度是O(k*N)
解決方法三:堆
  • 構(gòu)建一個k大小的小堆,先將前k個元素放入堆中,然后遍歷剩下的元素,如果大于堆頂?shù)脑?,就和堆頂?shù)脑剡M行交換,遍歷結(jié)束后,得到的堆上的值就是前k個最大的值
  • 代碼
    public Integer[] topK(int[] array, int k) {
        PriorityQueue<Integer> queue = new PriorityQueue<>();
        for(int i = 0; i < k; i++) {
            queue.add(array[i]);
        }
        for(int i = k; i < array.length; i++) {
            if(array[i] > queue.peek()) {
                queue.poll();
                queue.add(array[i]);
            }
        }
        return (Integer[])queue.toArray();
    }
  • 時間復雜度:O(N*logK)
解決方法四:隨機選擇
  • 使用減治的的思想,制定一個元素flag將比flag大的元素放在他左邊,比他小的放在他右邊
  • 如果flag的的下標index比k大說明前k個大的元素都在flag左邊的區(qū)間,然后在他左區(qū)間內(nèi)重復第一步直到找到下標為k的值
  • 如果flag的下標index比k小說明只要在他的右區(qū)間內(nèi)重復第一步找到下標為k-index的值
  • 找到第k個大的值后再進行此一步驟,它左邊的所有的元素就是前k個最大的值
  • 代碼:

    public int[] topK5(int[] array, int k) {
        int left = 0;
        int right = array.length - 1;
        //因為數(shù)組下標是以0開始的,因此第k個的小標為k - 1,因此傳入的為k - 1
        int flag = RS(array, left, right, k - 1);
        //返回值flag為第k個最大值的下標,因此需要前k個最大的值時,拷貝數(shù)組的范圍是[0, flag + 1)
        return Arrays.copyOfRange(array, 0, flag + 1));
    }
    
    private int RS(int[] array, int left, int right, int k) {
        if (left >= right) {
            return left;
        }
    
        int index = partition(array, left, right);
        int temp = index - left;
    
        if(temp >= k) {
            return RS(array, left, index - 1, k);
        } else {
            return RS(array, index + 1, right, k - index);
        }
    }
    
    private int partition(int[] array, int left, int right) {
        int tmp = array[left];
        int l = left;
        int r = right;
    
        while(l < r) {
            while(l < r && array[r] <= tmp) {
                r--;
            }
            array[l] = array[r];
            while(l < r && array[l] >= tmp) {
                l++;
            }
            array[r] = array[l];
        }
        array[l] = tmp;
        return l;
    }
  • 時間復雜度:O(N)

分享文章:TopK問題有幾種解決辦法?
鏈接URL:http://aaarwkj.com/article40/iipdeo.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供定制開發(fā)、搜索引擎優(yōu)化、企業(yè)網(wǎng)站制作網(wǎng)站排名、ChatGPT、做網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都做網(wǎng)站
久久久人妻精品一区二区三区四区| 日韩免费av在线网站| 亚洲精品一区av在线观看| 日本免费播放一区二区视频| 亚洲中文字幕高清乱码毛片| 97成人在线视频免费| 国产一级成人免费视频| 国产91九色蝌蚪在线观看| 欧美久久久久综合一区| 蜜桃在线视频在线观看| 久草免费人妻视频在线| 亚州无吗一区二区三区| 国产内射一级一片高清视频观看| 国产精品麻豆色哟哟av| 黄色av链接在线观看| 最新亚洲国产高清激情| 日韩欧美一区二区三区不卡在线 | 久久96国产精品久久秘臀| 国产视频成人免费观看| 亚洲精品国产av一区| 人人妻人人澡人人爽人人dvd| 久久香蕉香蕉公开视频| 日韩欧美高清一区二区| 欧美日韩国产特级性生活| 国产精品欧美日韩中文| 精品久久久久久久久999| av永久天堂一区二区三区| 日本免费一区二区三区等视频 | 男人的天堂成人午夜视频| 青青草原综合视频在线| 日韩在线一区中文字幕| 国产一区二区三区精品女同| 日本三卡=卡无人区| 国产在线一区二区三区观看 | 97成人在线视频免费| 亚洲日本一区二区三区电影| 亚洲精品不卡一区二区| 公交车上没穿内裤被插高潮不断| 邻居少妇扒开腿让我爽了一夜| 欧美国产日韩一区二区三区视频| 欧美日韩免费r在线视频|