日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

数组中的第K个最大元素(TopK问题)

發布時間:2023/12/29 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数组中的第K个最大元素(TopK问题) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目描述

在未排序的數組中找到第 k 個最大的元素。請注意,你需要找的是數組排序后的第 k 個最大的元素,而不是第 k 個不同的元素。

示例 1:
輸入: [3,2,1,5,6,4] 和 k = 2
輸出: 5

示例 2:
輸入: [3,2,3,1,2,4,5,5,6] 和 k = 4
輸出: 4
說明:

你可以假設 k 總是有效的,且 1 ≤ k ≤ 數組的長度。

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/kth-largest-element-in-an-array
著作權歸領扣網絡所有。商業轉載請聯系官方授權,非商業轉載請注明出處。

思路一(全局排序)

很直接,對原數組排序,然后返回第 k 個最大的元素(nums[n-k])即可。
時間復雜度為 O(Nlog?N)O(N \log N)O(NlogN)

思路二(局部排序)

用冒泡排序,選出k個最大的數,返回nums[k-1]即可。
時間復雜度為 O(Nk)O(Nk)O(Nk)

代碼(c++)

class Solution { public:int findKthLargest(vector<int>& nums, int k) {if(nums.size()==0) return 0;for(int i=0;i<k;i++){for(int j=nums.size()-1;j>i;j--){if(nums[j]>nums[j-1]) swap(nums[j],nums[j-1]);}}return nums[k-1];} };

思路三(堆)

維護一個存放k個元素的小頂推,遍歷數組,依次與堆頂元素比較,如果當前元素比堆頂元素大,則堆頂元素出堆,該元素入堆;否則繼續遍歷數組。這樣,當遍歷完所有元素后,堆中存放的便是數組中最大的k個數,堆頂便是第k大的數。
時間復雜度為 O(Nlog?k)O(N \log k)O(Nlogk)

代碼(c++)

class Solution { public:int findKthLargest(vector<int>& nums, int k) {if(nums.size()==0) return 0;priority_queue<int,vector<int>,greater<int> > q;for(int i=0;i<k;i++) q.push(nums[i]);for(int i=k;i<nums.size();i++){if(q.top()<nums[i]){q.pop();q.push(nums[i]);}}return q.top();} };

思路四(減治法)

快速排序每一次都會確定一個數在排序后的位置。這里我們可以利用快速排序這一特點,當找到第n-k個數,停止排序,返回該元素即可。
這里之所以是減治,是因為我們不需要真的像快速排序那樣,分別處理由排好序的那個數分開的兩個子數組。我們只需判斷排好序的那個數的位置與n-k的大小關系,確定所要找的數所在的子數組,處理這個子數組便可。
時間復雜度 平均情況 O(N)O(N)O(N),最壞情況 O(N2)O(N^2)O(N2)。

代碼(c++)

class Solution { public:int quickSort(vector<int>& nums,int l,int r,int k){int index=(int)round(1.0*rand()/RAND_MAX*(r-l)+l);swap(nums[index],nums[l]);int temp=nums[l];int left=l;int right=r;while(left<right){while(left<right&&nums[right]>=temp) right-=1;nums[left]=nums[right];while(left<right&&nums[left]<temp) left+=1;nums[right]=nums[left];}nums[left]=temp;if(left==k) return nums[left];else if(left<k) return quickSort(nums,left+1,r,k);else return quickSort(nums,l,right-1,k);}int findKthLargest(vector<int>& nums, int k) {if(nums.size()==0) return 0;srand((unsigned)time(NULL));int tempK=nums.size()-k;return quickSort(nums,0,nums.size()-1,tempK);} };

總結

以上是生活随笔為你收集整理的数组中的第K个最大元素(TopK问题)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 天天色图片 | 美女一区二区三区 | 在线观看中文字幕码 | 国产精品国产一区二区三区四区 | 午夜在线你懂的 | 国产综合一区二区 | fc2成人免费视频 | 免费在线观看黄网 | 韩国av在线免费观看 | 亚洲国产综合网 | 午夜视频久久 | 午夜视频一区二区三区 | 伊人福利视频 | 91青草视频 | 高级家教课程在线观看 | 免费av免费看 | 久久精品aaaaaa毛片 | 国产无遮挡18禁无码网站不卡 | 自拍偷拍20p | 国产精品美女久久久网av | 伊人精品 | 无码国产精品久久一区免费 | 欧美日韩一级在线观看 | 国产精品宾馆在线精品酒店 | 嫩模啪啪 | wwwwww色| 91婷婷色| 毛片在线播放视频 | a黄色片 | 国产一级片a | 亚洲视频免费在线 | 女人的av| 国产精品成人网站 | 国产午夜精品视频 | 国产在线中文字幕 | 嫩草嫩草嫩草嫩草嫩草 | zjzjzjzjzj亚洲女人 | 久久网站免费看 | 国产喷白浆一区二区三区 | 草一色| 51福利视频| 日韩成人综合 | 日韩视频在线观看一区二区三区 | 欧美a在线播放 | 国产视频一区二区在线播放 | 干操网 | 一本无码aⅴ久久久国产 | 日韩女优在线观看 | eeuss日韩 | 国产一区二区h | 91视频日本 | 国产成人高清视频 | 欧美激情视频在线播放 | 日韩午夜在线播放 | 黄色网址链接 | 色婷婷91| 亚洲综合精品国产一区二区三区 | 美日韩av在线 | 丰满少妇麻豆av苏语棠 | 可以在线观看的av网站 | 国产亚洲精品精品国产亚洲综合 | 亚洲激情社区 | 精品一区二区国产 | 怡红院成人在线 | 日韩精彩视频在线观看 | 高清免费视频日本 | 欧美黄视频 | 91看片看淫黄大片 | 夜夜狠 | 亚洲免费视频网站 | 区一区二视频 | 色人阁网站| 国产在线视频一区 | 亚洲制服丝袜诱惑 | 91成人精品一区在线播放 | 亚洲欧洲色图 | 影音先锋每日资源 | 男女在线观看视频 | 亚洲+小说+欧美+激情+另类 | 99re久久| 国产无遮挡又黄又爽又色 | 一二三四区视频 | 久久爱资源网 | 日韩欧美亚洲一区二区三区 | 日本视频黄色 | 久久久www成人免费无遮挡大片 | 精品欧美黑人一区二区三区 | 一卡二卡久久 | 一区二区午夜 | 精品蜜桃一区二区三区 | 国产天堂在线 | 一区二区三区四区五区在线视频 | 一区在线不卡 | 麻豆精品国产传媒 | jizz日韩 | 欧美天堂视频 | 美女100%视频免费观看 | 国产av一区二区三区传媒 | 激情视频在线免费观看 |