703 資料流中的第 K 大元素

2022-07-06 14:36:08 字數 840 閱讀 4780

設計乙個找到資料流中第 k 大元素的類(class)。注意是排序後的第 k 大元素,不是第 k 個不同的元素。

你的kthlargest類需要乙個同時接收整數k和整數陣列nums的構造器,它包含資料流中的初始元素。每次呼叫kthlargest.add,返回當前資料流中第 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);   // returns 8

kthlargest.add(4);   // returns 8

說明: 

你可以假設nums的長度≥k-1k≥ 1。

解答:維護乙個大根堆和乙個小根堆,小根堆存放最大的k-1個元素,大根堆存放剩餘的元素。當小根堆放入第k個元素後,取出小根堆堆頂元素放入大根堆。因此小根堆內元素個數永遠是k-1,大根堆的堆頂元素就是我們要的第k大元素

class

kthlargest

for(int i=k-1;i)

}public

int add(int

val)

}

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...