@@ -72,3 +72,47 @@ public:
72
72
}
73
73
};
74
74
```
75
+ ## 215.第K大元素 https://leetcode-cn.com/problems/kth-largest-element-in-an-array/
76
+
77
+ ``` c++
78
+ int findKthLargest (vector<int >&nums, int k) {
79
+ priority_queue<int, vector<int >, greater<int >>Q;
80
+ for(auto& n : nums) {
81
+ Q.push(n);
82
+ if(Q.size() > k) Q.pop();
83
+ }//建立一个大根堆,做 k - 1k−1 次删除操作后堆顶元素就是我们要找的答案
84
+ return Q.top();
85
+ }
86
+ //手写最大堆排序
87
+ class Solution {
88
+ public:
89
+ void makeHeapify(std::vector<int >&nums, int i, int heap_size) {
90
+ int l = i * 2 + 1, r = i * 2 + 2, largest = i;
91
+ if (l < heap_size && nums[ l] > nums[ largest] ) {
92
+ largest = l;
93
+ }
94
+ if (r < heap_size && nums[ r] > nums[ largest] ) {
95
+ largest = r;
96
+ }
97
+ if (largest != i) {
98
+ swap(nums[ i] , nums[ largest] );
99
+ makeHeapify(nums, largest, heap_size);
100
+ }
101
+ }
102
+ void buildMaxHeap(std::vector<int >&nums, int heap_size) {
103
+ for (int i = heap_size / 2; i >= 0; --i) {
104
+ makeHeapify(nums, i, heap_size);
105
+ }//从叶子节点开始堆化
106
+ }
107
+ int findKthLargest(vector<int >&nums, int k) {
108
+ int heap_size = nums.size();
109
+ buildMaxHeap(nums, heap_size);
110
+ for (int i = nums.size() - 1; i >= nums.size() - k + 1; --i) {
111
+ swap(nums[ 0] , nums[ i] );
112
+ --heap_size;
113
+ makeHeapify(nums, 0, heap_size);
114
+ }
115
+ return nums[ 0] ;
116
+ }
117
+ };
118
+ ```
0 commit comments