703.データストリームのK番目に大きい要素
k
大きな要素のクラス(クラス)を見つけるための最初のデータストリームの設計。k
主要な要素の順序付けの後、は最初のk
異なる要素ではないことに注意してください。
KthLargest
カテゴリを実現してください:
KthLargest(int k, int[] nums)
整数k
および整数フローnums
はオブジェクトを初期化します。挿入データストリーム、最初からのリターン電流が流れる大素子。
int add(int val)
val
nums
k
例:
输入:
["KthLargest", "add", "add", "add", "add", "add"]
[[3, [4, 5, 8, 2]], [3], [5], [10], [9], [4]]
输出:
[null, 4, 5, 5, 8, 8]
解释:
KthLargest kthLargest = new KthLargest(3, [4, 5, 8, 2]);
kthLargest.add(3); // return 4
kthLargest.add(5); // return 5
kthLargest.add(10); // return 5
kthLargest.add(9); // return 8
kthLargest.add(4); // return 8
促す:
- 1 <= k <= 104
- 0 <= nums.length <= 104
- -104 <= nums [i] <= 104
- -104 <= val <= 104
- addメソッドは最大104回呼び出すことができます
- タイトルデータは、k番目に大きい要素を探すときに、配列に少なくともk個の要素があることを保証します。
方法1:優先キュー
問題解決のアイデア
アイデアは重要ではありません。明けましておめでとうございます。!
参照コード
class KthLargest {
private PriorityQueue<Integer> queue;
private int k;
public KthLargest(int k, int[] nums) {
this.queue = new PriorityQueue<>();
this.k = k;
for (int val : nums) {
add(val);
}
}
public int add(int val) {
queue.offer(val);
if (queue.size() > k) {
queue.poll();
}
return queue.peek();
}
}
の結果