leetcode215. 陣列中的第K個最大元素
阿新 • • 發佈:2018-12-19
在未排序的陣列中找到第 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 ≤ 陣列的長度。
#include<iostream> #include<vector> using namespace std; class Solution { public: int findKthLargest(vector<int>& nums, int k) { int start = 0; int end = nums.size(); while (start < end){ int i = start; int j = end - 1; int mid = nums[start]; while (i < j) { while (i < j && mid <= nums[j]) j--; nums[i] = nums[j]; while (i < j && mid > nums[i]) i++; nums[j] = nums[i]; } nums[i] = mid; if (i > nums.size() - k) // nums.size() - k 由於排序是升序 end = i; else if (i < nums.size() - k) start = i + 1; else{ //cout<<nums[0]<<nums[1]<<nums[2]<<nums[3]<<nums[4]<<nums[5]<<endl; //cout<<"i: "<<i<<"j: "<<j<<endl; return nums[i]; } } } }; int main() { int a[10] = { 10, 7, 8, 6, 3, 1, 5, 2, 4, 9 }; vector<int> nums(a, a + sizeof(a)/sizeof(int)); int k = 2; printf("%d", Solution().findKthLargest(nums, k)); return 0; }