LeetCode 703. Kth Largest Element in a Stream
Posted Dylan_Java_NYC
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 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.
题解:
用minHeap维持size在k.
Time Complexity: KthLargest, O(n * logk). add O(logk). n = nums.length.
Space: O(k).
AC Java:
1 class KthLargest { 2 PriorityQueue<Integer> minHeap; 3 int k; 4 5 public KthLargest(int k, int[] nums) { 6 this.minHeap = new PriorityQueue<Integer>(); 7 this.k = k; 8 for(int num : nums){ 9 add(num); 10 } 11 } 12 13 public int add(int val) { 14 if(minHeap.size() < k){ 15 minHeap.add(val); 16 }else if(minHeap.peek() < val){ 17 minHeap.poll(); 18 minHeap.add(val); 19 } 20 21 return minHeap.peek(); 22 } 23 } 24 25 /** 26 * Your KthLargest object will be instantiated and called as such: 27 * KthLargest obj = new KthLargest(k, nums); 28 * int param_1 = obj.add(val); 29 */
以上是关于LeetCode 703. Kth Largest Element in a Stream的主要内容,如果未能解决你的问题,请参考以下文章
703. Kth Largest Element in a Stream
Leetcode 703题数据流中的第K大元素(Kth Largest Element in a Stream)Java语言求解
703. Kth Largest Element in a Stream/215. Kth Largest Element in an Array/
leetcode Kth Largest Element in a Stream——要熟悉heapq使用