【动态维护前 x 大元素】LeetCode 3321. 计算子数组的 x-sum II

news/2025/11/5 23:04:28/文章来源:https://www.cnblogs.com/RomanLin/p/19194871

View Post

【动态维护前 x 大元素】LeetCode 3321. 计算子数组的 x-sum II

题目

https://leetcode.cn/problems/find-x-sum-of-all-k-long-subarrays-ii/description/

题解

定义两个有序集合 \(L, R\) 动态维护数组前 \(x\) 大元素。以滑动窗口的方式遍历数组,窗口大小为 \(n - k + 1\),其中有序集合 \(R\) 用于维护当前窗口前 \(x\) 大的元素(可能不足 \(x\) 个),有序集合 \(L\) 维护当前窗口剩余的其它元素。

参考代码

using PLI = pair<long long, int>;class Solution {
private:set<PLI> L, R;long long res = 0LL;void add(PLI p, int x) {if (R.size() < x) {R.insert(p);res += p.first * p.second;} else if (*R.begin() > p) {L.insert(p);} else {PLI d = *R.begin();L.insert(d);res -= d.first * d.second;R.erase(R.begin());R.insert(p);res += p.first * p.second;}}void del(PLI p) {if (R.find(p) != R.end()) {R.erase(p);res -= p.first * p.second;if (!L.empty()) {PLI a = *L.rbegin();res += a.first * a.second;R.insert(a);L.erase(a);}} else {L.erase(p);}}public:vector<long long> findXSum(vector<int>& nums, int k, int x) {int n = nums.size();vector<long long> ans(n - k + 1);unordered_map<int, int> mp;for (int i = 0; i < n; ++ i) {if (i >= k) {del({mp[nums[i - k]], nums[i - k]});if (-- mp[nums[i - k]] > 0) {add({mp[nums[i - k]], nums[i - k]}, x);} }if (mp[nums[i]] > 0) {del({mp[nums[i]], nums[i]});}add({++ mp[nums[i]], nums[i]}, x);if (i >= k - 1) {ans[i - k + 1] = res;}}return ans;}
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/957201.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

100小时学会SAP—问题8:财务凭证行项目BSEG及对应的六张表

100小时学会SAP—问题8:财务凭证行项目BSEG及对应的六张表FI会计模块中输入一笔业务将会记一个财务凭证,SAP系统中将凭证信息分为抬头信息和明细信息两部分加以存储。其中抬头(Header)信息存储在透明表BKPF中,明细(…

100小时学会SAP—问题9:MD03提示日期在有效工厂日历之后(请改正)

100小时学会SAP—问题9:MD03提示日期在有效工厂日历之后(请改正)执行事务码MD03时,报错如下:提示日期在有效工厂日历之后(请改正)解决方法:这是因为在创建工厂数据的时候工厂的日期没有更改造成的。 路径为:SP…

100小时学会SAP—问题6:创建采购收货时出现WE在年2025中编号不存在

100小时学会SAP—问题6:创建采购收货时出现WE在年2025中编号不存在前台 后勤—物料管理—库存管理—货物移动—收货—对采购订单—采购订单GR(MIGO) 报了如下错误:有关业务/事件类型WE在年2025的号码范围不存在解决…

100小时学会SAP—问题7:FB70提示过账码没有定义

100小时学会SAP—问题7:FB70提示过账码没有定义执行事务码FB70时,报错如下:Posting keys not defined原因:在文档“0528—FB70运行时提示在表T030B中AGD输入丢失”中,解决方法错误,其中的PK码自己瞎填,导致错误…

树剖

接dfs序。 https://www.cnblogs.com/ybjnb/p/19089551 树剖 (dfs序的性质依旧满足 即子树也是一段连续区间)将一颗树转化为一个序列 将树上任意一条路径转化成 log(n) 段连续区间 然后就可以用序列数据结构维护信息。…

100小时学会SAP—问题5:SAP导航菜单字体突然变小

100小时学会SAP—问题5:SAP导航菜单字体突然变小问题:SAP导航菜单字体突然变小 无论修改字体、字符集或登录其他服务器的SAP都是菜单字体变小解决方法: 删除注册表(regedit)HKEY_CURRENT_USER\Software\SAP\SAPGU…

如何降低大模型幻觉

目录数据层面的改进检索增强生成(RAG)提示工程优化强化学习与人类反馈多模型验证置信度校准事实核查层特定领域微调 在大模型开发中减少幻觉是一个核心挑战。以下是一些有效的策略: 数据层面的改进 高质量的训练数据…

11月5日---学习总结

一、内存四区 代码区|全局区|栈区|堆区 1.程序运行前(生成可执行程序exe,未执行该程序之前) 1.1 代码区: *特点1:只读:不可修改 *特点2:共享:防止频繁使用占用内存 1.2全局区:全局变量、静态变量、常量 *静态…

11-2

(1)今天学习了将idea编写的后端代码与vscode上的前端代码连接 (2)明天继续深造

100小时学会SAP—问题4:ME21N创建采购订单报错

100小时学会SAP—问题4:ME21N创建采购订单报错创建采购订单ME21N时报错:物料***的强制账户设置(输入账户设置类别) 消息号ME062 诊断 在此工厂中没有此物料类型基于价值的库存管理的备抵.因此账户分配是十分必要的. 过…

多智能体架构中 如何解决总控agent路由错误的问题

目录背景和价值🤖 避免多Agent架构中总控Agent路由错误与回撤方案🎯 避免路由错误的策略↩️ 错误回撤与纠正方案如何让分类器输出一个置信度分数。如果置信度低于预设的阈值,做相关操作1. 🤖 基于大型语言模型…

11-1

(1)今天学习了将idea编写的后端代码与vscode上的前端代码连接 (2)明天继续深造

回归(监督学习)

回归是监督学习的两大核心任务之一(另一个是分类)。它的目标是预测一个连续的数值输出。 一、核心思想:预测一个具体的数值 简单来说:回归就是“找规律,预测数”。 分类 回答的是 “是什么?” 的问题,答案是离散…

100小时学会SAP—问题3:成本控制控制凭证的编号范围

100小时学会SAP—问题3:成本控制控制凭证的编号范围此项配置是在后台为指定的成本控制范围(Controlling Area)维护编号范围,用于成本控制中个各类凭证。 维护成本控制范围的编号范围可以采用手工法和复制法,复制法比…

10-20

(1)今天学习了vscode (2)明天继续深造

10-25

(1)今天学习了使用vscode编写网页的前端代码 (2)明天继续深造

10-24

(1)今天学习了使用vscode编写网页的前端代码 (2)明天继续深造

10-23

(1)今天学习了使用vscode编写网页的前端代码 (2)明天继续深造

10-17

(1)今天预习了动态规划 (2)今天学习了web (2)明天继续深造

100小时学会SAP—问题2:FB70运行时提示在表T030B中AGD输入丢失

100小时学会SAP—问题2:FB70运行时提示在表T030B中AGD输入丢失在运行FB70录入相应的会计凭证的时候,报错:在表T030B中,AGD的输入丢失。 解决方案: 第一种:输入事务代码FBKP,进入其中:Automatic postings进入其中…