码迷,mamicode.com
首页 > 其他好文 > 详细

leetcode 215. Kth Largest Element in an Array

时间:2020-01-03 21:27:13      阅读:104      评论:0      收藏:0      [点我收藏+]

标签:put   sum   sort   第k大数   order   复杂   思路   快排思想   may   

Find the kth largest element in an unsorted array. Note that it is the kth largest element in the sorted order, not the kth distinct element.

Example 1:

Input: [3,2,1,5,6,4] and k = 2
Output: 5

Example 2:

Input: [3,2,3,1,2,4,5,5,6] and k = 4
Output: 4

Note: 
You may assume k is always valid, 1 ≤ k ≤ array‘s length.

 

题目大意:求一个未排序数组的第k大的数。

 

思路:

1、直接排序,时间复杂度:O(nlogn)

2、利用优先队列,维持一个大小为k的堆。时间复杂度:O(nlogk)

3、利用快排思想,时间复杂度:O(n)

C++代码:

 1 class Solution {
 2     //划分函数,返回的数的索引值对应最终排序后的位置
 3     int partition(vector<int> &nums, int left, int right) {
 4         int p = nums[left];
 5         while (left < right) {
 6             while (left < right && nums[right] >= p) right--;
 7             nums[left] = nums[right];
 8             while (left < right && nums[left] <= p) left++;
 9             nums[right] = nums[left];
10         }
11         nums[left] = p;
12         return left;
13     }
14 public:
15     int findKthLargest(vector<int>& nums, int k) {
16         int l = 0, r = nums.size() - 1;
17         while (l < r) {
18             int p = partition(nums, l, r);
19             if (p + k == nums.size())  { //满足这个条件表明p指向的位置是第k大的数
20                 return nums[p];
21             }
22             if (p + k < nums.size()) //这个时候只需要排序p后半部分的数组即可找到最终的第k大数
23                 l = p + 1;
24             else //此时只需要排序p前半部分
25                 r = p - 1;
26         }
27         return nums[nums.size() - k];
28     }
29 };

 

leetcode 215. Kth Largest Element in an Array

标签:put   sum   sort   第k大数   order   复杂   思路   快排思想   may   

原文地址:https://www.cnblogs.com/qinduanyinghua/p/12146625.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!