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