Re: [闲聊] 每日leetcode

楼主: enmeitiryous (enmeitiryous)   2024-08-12 09:02:57
等补完课下午再来写昨天的
题目: 703. Kth Largest Element in a Stream
设计一个class每次回传stream中第k大的element,一开始的kthlargest会给定k和起始一
个代表stream的vector,之后的add(val) func会将val加入倒stream中,并回传stream中
第k大的数字
思路:
这题可以很直观用暴力法,一开始先sort好stream,之后每次add则是用upper_bound找出
val应该插在哪,插完后回传第k大的数,但结果很烂,正确的解法应该是要保持一个k大
小的min heap根据val值判断要直接回传heap top还是pop后push val再回传,注意的是
constraint是保证insert完能找到第k大,所以insert前当前heap可能为空
priority_queue<int, vector<int>, greater<int> > pre_ans;
int gg=0;
KthLargest(int k, vector<int>& nums) {
gg=k;
for(auto pp:nums){
if(pre_ans.size()<k){
pre_ans.push(pp);
}
else{
if(pp>pre_ans.top()){
pre_ans.pop();
pre_ans.push(pp);
}
}
}
}
int add(int val) {
if(pre_ans.size()<gg){
pre_ans.push(val);
return pre_ans.top();
}
if(val<=pre_ans.top()){
return pre_ans.top();
}
else{
pre_ans.pop();
pre_ans.push(val);
return pre_ans.top();
}
}

Links booklink

Contact Us: admin [ a t ] ucptt.com