leetcode 703. Kth Largest Element in a Stream & c++ priority_queue & minHeap/maxHeap

703. Kth Largest Element in a Stream & c++ priority_queue & minHeap/maxHeap

相关链接

leetcode

c++ priority_queue cplusplus

c++ priority_queue cnblog

背景知识

??堆是算法中常用的数据结构之一,其结构是完全二叉树,但实现的方法最常见的是使用数组;这里主要介绍小顶堆,其根元素最小,对于任何一个节点来说,他都比其后代要小;访问器根元素的时间为O(1);树的高度严格控制在 log(n) 以内,故每次插入元素的时间为 O(log(n)).

??在c++的STL中提供了现成的堆模板给我们使用;你需要引入头文件queue.h即可;

具体使用如下

#include<queue.h>

using namespace std;

int main()
{
    //大顶堆
    priority_queue<int> maxHeap;
    //等价于
    priority_queue<int, vector<int>, less<int> > maxHeap1;

    //小顶堆
    priority_queue<int, vector<int>, greater<int> > maxHeap1;

}

描述

?? Design a class to find the kth largest element in a stream. Note that it is the kth largest element in the sorted order, not the kth distinct element.

??Your KthLargest class will have a constructor which accepts an integer k and an integer array nums, which contains initial elements from the stream. For each call to the method KthLargest.add, return the element representing the kth largest element in the stream.

Example:

int k = 3;

int[] arr = [4,5,8,2];

KthLargest kthLargest = new KthLargest(3, arr);

kthLargest.add(3); // returns 4

kthLargest.add(5); // returns 5

kthLargest.add(10); // returns 5

kthLargest.add(9); // returns 8

kthLargest.add(4); // returns 8

Note:

You may assume that nums‘ length ≥ k-1 and k ≥ 1.

solution1

??用一个小顶堆保存最大的K个数字;根节点处为K个数字中最小的一个,也是所有数据中第k大的数字;每当有新元素进来的时候,拿走小顶堆中最小的元素;


using namespace std;

class KthLargest {
public:
	int k;
	priority_queue<int, vector<int>, greater<int> > minHeap;
public:
	KthLargest(int k, vector<int>& nums) :minHeap(nums.begin(), nums.end()) {
		this->k = k;
	}

	int add(int val) {
		minHeap.push(val);
		while (k < minHeap.size())
			minHeap.pop();
		return minHeap.top();
	}
};

int main()
{
	priority_queue<int> maxHeap;
	//priority_queue<int, vector<int>, less<int> > maxHeap;
	priority_queue<int, vector<int>, greater<int> > minHeap;

	int k = 3;
	vector<int> arr = { 4,5,8,2 };

	KthLargest kthLargest =KthLargest(3, arr);
	cout<<kthLargest.add(3);   // returns 4
	cout << kthLargest.add(5);   // returns 5
	cout << kthLargest.add(10);  // returns 5
	cout << kthLargest.add(9);   // returns 8
	cout << kthLargest.add(4);   // returns 8

	system("pause");
}

原文地址:https://www.cnblogs.com/qwfand/p/12610576.html

时间: 2024-10-07 19:50:05

leetcode 703. Kth Largest Element in a Stream & c++ priority_queue & minHeap/maxHeap的相关文章

LeetCode 703. Kth Largest Element in a Stream

原题链接在这里:https://leetcode.com/problems/kth-largest-element-in-a-stream/description/ 题目: Design a class to find the kth largest element in a stream. Note that it is the kth largest element in the sorted order, not the kth distinct element. Your KthLarg

703. Kth Largest Element in a Stream

https://leetcode.com/problems/kth-largest-element-in-a-stream/description/ class KthLargest { public: priority_queue<int> q; int k; KthLargest(int k, vector<int> nums) { this->k = k; for (auto &i : nums) add(i); } int add(int val) { if

703. Kth Largest Element in a Stream/215. Kth Largest Element in an Array/

703 非常经典的一个题,假设有一个不断增加的序列,要求输出第K 大的数 int k = 3; int[] arr = [4,5,8,2]; KthLargest kthLargest = new KthLargest(3, arr); kthLargest.add(3);   // returns 4 kthLargest.add(5);   // returns 5 kthLargest.add(10);  // returns 5 kthLargest.add(9);   // retur

leetcode Kth Largest Element in a Stream——要熟悉heapq使用

703. Kth Largest Element in a Stream Easy Design a class to find the kth largest element in a stream. Note that it is the kth largest element in the sorted order, not the kth distinct element. Your KthLargest class will have a constructor which accep

Kth Largest Element in a Stream

Design a class to find the kth largest element in a stream. Note that it is the kth largest element in the sorted order, not the kth distinct element. Your KthLargest class will have a constructor which accepts an integer k and an integer array nums,

LeetCode | 0215. Kth Largest Element in an Array数组中的第K个最大元素【Python】

LeetCode 0215. Kth Largest Element in an Array数组中的第K个最大元素[Medium][Python][快排][堆] Problem LeetCode 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:

网易2016 实习研发工程师 [编程题]寻找第K大 and leetcode 215. Kth Largest Element in an Array

传送门 有一个整数数组,请你根据快速排序的思路,找出数组中第K大的数. 给定一个整数数组a,同时给定它的大小n和要找的K(K在1到n之间),请返回第K大的数,保证答案存在. 测试样例: [1,3,5,2,2],5,3 返回:2 note: 注意手写快排的时候: while(i < j) { while(j > i && a[j] > a[left]) j--; while(i < j && a[i] <= a[left]) i++; if(i

LeetCode 215 : Kth Largest Element in an Array

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. For example,Given [3,2,1,5,6,4] and k = 2, return 5. Note: You may assume k is always valid, 1 ≤ k ≤ array's

Java for LeetCode 215 Kth Largest Element in an Array【Coming Soon】

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. For example, Given [3,2,1,5,6,4] and k = 2, return 5. 解题思路: 本题是<算法导论>原题,