在未排序的數組中找到第 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 ≤ 數組的長度。
快排思想。
class Solution { public: int findKthLargest(vector<int>& nums, int k) { return quick_sort(nums,0,nums.size()-1,k); } int quick_sort(vector<int>& data, int left, int right, int k) { int i=left; int j=left; int pos=data[right]; int len=right-left+1; if(left<right) { for(;j<right;j++) { if(data[j]>pos) { int tmp=data[i]; data[i]=data[j]; data[j]=tmp; i++; } } data[j]=data[i]; data[i]=pos; int w_max=i-left+1; //pos此時處在i處,i-left+1表示pos是第幾大的數 if(w_max==k) { return pos; } else if(w_max<k) //比k大的數在右邊,則查詢右邊第k-w_max大的數 { return quick_sort(data,i+1,right,k-w_max); } else //比k大的數在左邊,則查詢左邊第k大 return quick_sort(data,left,i-1,k); } else return pos; } };
leetcode 數組中的第K個最大元素 快排思想
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.