(资料图片仅供参考)
1825.求出MK平均值;每日打卡!class MKAverage { public: MKAverage(int m, int k) { // 有参构造,初始化实例 this->m = m; this->k = k; this->sum = 0; } void addElement(int num) { // 添加元素 this->q.push(num); if(q.size() <= m) { // 如果数据流容器数目不足m个 sMid.insert(num); this->sum = num; if(q.size() == m) { while(sMin.size() < k) { // 最小值容器需满足k个 sMin.insert(*sMid.begin()); sum -= *sMid.begin(); sMid.erase(sMid.begin()); } while(sMax.size() < k) { // 最大值容器需满足k个 sMax.insert(*sMid.rbegin()); sum -= *sMid.rbegin(); sMid.erase(prev(sMid.end())); } } return; } if(num < *sMin.rbegin()) { // m 已满足 多出的一个选择要放入的容器 sMin.insert(num); sMid.insert(*sMin.rbegin()); this->sum = *sMin.rbegin(); sMin.erase(prev(sMin.end())); } else if(num > *sMax.begin()) { sMax.insert(num); sMid.insert(*sMax.begin()); this->sum = *sMax.begin(); sMax.erase(sMax.begin()); } else { sMid.insert(num); this->sum = num; } int temp = q.front(); q.pop(); // 移除最先加入求均值容器的元素 if (sMin.count(temp) > 0) { // 判断最先加入的元素在哪个容器就移除这个元素 sMin.erase(sMin.find(temp)); // 移除一个 sMin.insert(*sMid.begin()); // 将中间容器的最小值放入 this->sum -= *sMid.begin(); sMid.erase(sMid.begin()); // 删除中间容器的最小值 } else if (sMax.count(temp) > 0) { sMax.erase(sMax.find(temp)); sMax.insert(*sMid.rbegin()); this->sum -= *sMid.rbegin(); sMid.erase(prev(sMid.end())); } else { sMid.erase(sMid.find(temp)); this->sum -= temp; } } int calculateMKAverage() { if(q.size() < m) { return -1; } return sum / (m - 2*k); }public: int m,k; queue q; // 数据流容器 multiset sMin,sMid,sMax; // 最小,中间,最大容器 long long sum; // 和};
相关稿件
最近更新
• 首钢股份:原燃料涉及物料品种较多,预计2023年国内大宗原燃料价格维持相对高位
• 鞍重股份:公司与临武县政府签署的投资协议,尚需经2022年12月26日召开的股东大会审议后生效
• 每日快报!福晶科技:2022年度具体经营情况将在年报中披露,届时敬请关注,祝您新春快乐,阖家幸福!
• 每日热门:四川九洲:公司是C919大飞机的一级供应商,承担大飞机客舱广播内话子系统任务
• 短讯!王健林将万达酒店发展65.04%股权抵押给淡马锡进行融资
• 全球快资讯丨央行菏泽市中心支行连开罚单,山东2家农商行共计被罚80万
• ST森源:公司目前的业务主要包括输变电业务和环卫服务业务
• 订单排到2028年!中国LNG船新接订单量同比增长超4倍