Учитывая массив целых чисел nums
и целое число k
, вернуть самый большой kth
элемент в массиве.
Обратите внимание, что это kth
самый большой элемент в отсортированном порядке, а не kth
отдельный элемент.
Можете ли вы решить ее без сортировки?
Пример 1:
Input: nums = [3,2,1,5,6,4], k = 2 Output: 5
Пример 2:
Input: nums = [3,2,3,1,2,4,5,5,6], k = 4 Output: 4
Ограничения:
1 <= k <= nums.length <= 105
-104 <= nums[i] <= 104
Два момента, о которых нужно позаботиться…
kth
самый большой элемент в отсортированном порядке, а неkth
отдельный элемент.- решить его без сортировки
class Solution { public: int findKthLargest(vector<int>& nums, int k) { priority_queue<int> pq; for(int i=0;i<nums.size();i++){ pq.push(nums[i]); } int x=-1; while(k--){ x=pq.top(); pq.pop(); } return x; } };
Это очень простой вопрос… используйте очередь с приоритетом (максимальная куча) вставьте все элементы, а затем удалите k элементов из очереди с наивысшим приоритетом (pq) …вашим ответом будет удаление последнего элемента.
Примечание. - Если запрашивается отдельный, используйте Set
Спасибо . Продолжай учиться :)