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

2021-10-08 07:33:20 字數 1134 閱讀 9403

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

該題與topk問題類似,題目要求找到資料流中第k大的元素,因此只需維護乙個大小為k的小頂堆,堆頂元素即為第k大的元素。在建構函式中先對堆陣列heap賦值,然後利用shiftdown操作構建堆,若nums長度大於k則將k後的元素分別進行add操作。

堆的介紹可參考

class

kthlargest

for(

int i = nowsize /2-

1; i >=

0; i--)if

(nowsize < nums.length)}}

public

intadd

(int val)

else

}return heap[0]

;}public

void

shiftdown

(int ind)

if(right_child < nowsize && heap[small_ind]

> heap[right_child])if

(small_ind != ind)

}public

void

shiftup

(int ind)

}}

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