Day 85 215. 数组中的第K个最大元素

215. 数组中的第K个最大元素

题目

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
给定整数数组 nums 和整数 k,请返回数组中第 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
 

提示:

1 <= k <= nums.length <= 104
-104 <= nums[i] <= 10^4

题目思路

  • 1、今日题目是很好的题目,一个复习快排的思想,一个复习如何建立堆。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
class Solution{
public:
void heap_sort(vector<int>&ans, int i, int n) {
int l = i * 2 + 1, r = i * 2 + 2, max = i;

if (l < n && ans[l] > ans[max]) max = l;
if (r < n && ans[r] > ans[max]) max = r;

if (max != i)
{
swap(ans[i], ans[max]);
heap_sort(ans, max, n);
}
}

void buildHeap(vector<int>& ans, int n) {
for (int i = n / 2; i >= 0; --i) heap_sort(ans, i, n);
}

int findKthLargest(vector<int>& nums, int k) {
int n = nums.size();
buildHeap(nums, n);
for (int i = nums.size() - 1; i >= nums.size() - k + 1; i--)
{
swap(nums[0], nums[i]);
--n;
heap_sort(nums, 0, n);
}
return nums[0];
}
};

复杂度

  • 时间复杂度:O(nlogn)
  • 空间复杂度:O(logn)

Day 85 215. 数组中的第K个最大元素
https://chaggle.github.io/2021/12/03/Leetcode/91-day/day-85/
作者
chaggle
发布于
2021年12月3日
许可协议