每日一題之資料流中第K大元素

2021-10-19 09:15:07 字數 1089 閱讀 8944

題目描述:

設計乙個找到資料流中第 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...