題目描述:
設計乙個找到資料流中第 k 大元素的類(class)。注意是排序後的第 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
解題過程:題目要求求k大元素,所以我們需要在把元素從大到小排列進行遍歷 需要 新增k元素時進行判斷讀取元素型別
方法:優先佇列
我們可以使用乙個大小為 kk 的優先佇列來儲存前 kk 大的元素,其中優先佇列的隊頭為佇列中最小的元素,也就是第 kk 大的元素。
在單次插入的操作中,我們首先將元素 \textitval 加入到優先佇列中。如果此時優先佇列的大小大於 kk,我們需要將優先佇列的隊頭元素彈出,以保證優先佇列的大小為 kk。
class
kthlargest
}int
add(
int val)
return q.
top();}};
703 資料流中的第K大元素
設計乙個找到資料流中第k大元素的類 class 注意是排序後的第k大元素,不是第k個不同的元素。你的 kthlargest 類需要乙個同時接收整數 k 和整數陣列nums 的構造器,它包含資料流中的初始元素。每次呼叫 kthlargest.add,返回當前資料流中第k大的元素。示例 int k 3 ...
703 資料流中的第K大元素
設計乙個找到資料流中第k大元素的類 class 注意是排序後的第k大元素,不是第k個不同的元素。你的kthlargest類需要乙個同時接收整數k和整數陣列nums的構造器,它包含資料流中的初始元素。每次呼叫kthlargest.add,返回當前資料流中第k大的元素。示例 int k 3 int ar...
703 資料流中的第K大元素
設計乙個找到資料流中第k大元素的類 class 注意是排序後的第k大元素,不是第k個不同的元素。你的kthlargest類需要乙個同時接收整數k和整數陣列nums的構造器,它包含資料流中的初始元素。每次呼叫kthlargest.add,返回當前資料流中第k大的元素。示例 int k 3 int ar...