LeetCode703 資料流中的第 K 大元素

2021-10-14 11:25:15 字數 1137 閱讀 6935

設計乙個找到資料流中第 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個最小的,當新增乙個元素是,需要和頂部元素比較,如果小於頂部元素直接捨去,如果大於頂部元素,則先刪除頂部元素,在新增此元素。我們可以直接使用priorityqueue優先順序佇列,但是作為乙個有心人,要知其所以然,了解底層結構和實現,這樣才能更高的運用資料結構來解決問題, 關於優先順序佇列和小頂堆的知識請參考這兩篇文章 priorityqueue的用法和底層實現原理           

queue的詳細分析

class kthlargest 

}//當新增乙個元素是,需要和頂部元素比較,如果小於頂部元素直接捨去,如果大於頂部元素,則先刪除頂部元素,在新增此元素。

LeetCode 703 資料流中的最k大元素

703 資料流中的最k大元素 題目 設計乙個找到資料流中第k大元素的類 class 注意是排序後的第k大元素,不是第k個不同的元素。你的 kthlargest 類需要乙個同時接收整數 k 和整數陣列nums 的構造器,它包含資料流中的初始元素。每次呼叫 kthlargest.add,返回當前資料流中...

Leetcode 703 資料流中的第K大元素

設計乙個找到資料流中第k大元素的類 class 注意是排序後的第k大元素,不是第k個不同的元素。你的 kthlargest 類需要乙個同時接收整數 k 和整數陣列nums 的構造器,它包含資料流中的初始元素。每次呼叫 kthlargest.add,返回當前資料流中第k大的元素。示例 int k 3 ...

leetcode 703 資料流中第K大元素

題目 設計乙個找到資料流中第k大元素的類 class 注意是排序後的第k大元素,不是第k個不同的元素。你的 kthlargest 類需要乙個同時接收整數 k 和整數陣列nums 的構造器,它包含資料流中的初始元素。每次呼叫 kthlargest.add,返回當前資料流中第k大的元素。示例 int k...