Design a class to find the kth largest element in a stream. Note that it is the kth largest element in the sorted order, not the kth distinct element.
Your KthLargest
class will have a constructor which accepts an integer k
and an integer array nums
, which contains initial elements from the stream. For each call to the method KthLargest.add
, return the element representing the kth largest element in the stream.
Example:
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
Note:
You may assume that nums
' length ≥ k-1
and k
≥ 1.
设计一个找到数据流中第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-1
且k
≥ 1。
Time Limit Exceeded
1 class KthLargest { 2 var st:[Int] = [Int]() 3 var K:Int = 0 4 5 init(_ k: Int, _ nums: [Int]) { 6 var nums = nums 7 nums.sort() 8 for num in nums 9 { 10 st.append(num) 11 if st.count > k 12 { 13 st.removeFirst() 14 } 15 } 16 K = k 17 } 18 19 func add(_ val: Int) -> Int { 20 st.append(val) 21 st.sort() 22 if st.count > K 23 { 24 st.removeFirst() 25 } 26 return st.first! 27 } 28 } 29 30 /** 31 * Your KthLargest object will be instantiated and called as such: 32 * let obj = KthLargest(k, nums) 33 * let ret_1: Int = obj.add(val) 34 */ 35