2382. 删除操作后的最大子段和--(phase2--day3)
2382. 删除操作后的最大子段和
给你两个下标从 0 开始的整数数组 nums 和 removeQueries ,两者长度都为 n 。对于第 i 个查询,nums 中位于下标 removeQueries[i] 处的元素被删除,将 nums 分割成更小的子段。
一个 子段 是 nums 中连续 正 整数形成的序列。子段和 是子段中所有元素的和。
请你返回一个长度为 n 的整数数组 answer ,其中 answer[i]是第 i 次删除操作以后的 最大 子段和。
**注意:**一个下标至多只会被删除一次。
示例 1:
输入:nums = [1,2,5,6,1], removeQueries = [0,3,2,4,1]
输出:[14,7,2,2,0]
解释:用 0 表示被删除的元素,答案如下所示:
查询 1 :删除第 0 个元素,nums 变成 [0,2,5,6,1] ,最大子段和为子段[2,5,6,1] 的和 14 。
查询 2 :删除第 3 个元素,nums 变成 [0,2,5,0,1] ,最大子段和为子段 [2,5]的和 7 。
查询 3 :删除第 2 个元素,nums 变成 [0,2,0,0,1] ,最大子段和为子段 [2] 的和 2 。
查询 4 :删除第 4 个元素,nums 变成 [0,2,0,0,0] ,最大子段和为子段 [2] 的和 2 。
查询 5 :删除第 1个元素,nums 变成 [0,0,0,0,0] ,最大子段和为 0 ,因为没有任何子段存在。 所以,我们返回 [14,7,2,2,0] 。
示例 2:
输入:nums = [3,2,11,1], removeQueries = [3,2,1,0]
输出:[16,5,3,0] 解释:用 0
表示被删除的元素,答案如下所示:
查询 1 :删除第 3 个元素,nums 变成 [3,2,11,0] ,最大子段和为子段 [3,2,11]的和 16 。
查询 2 :删除第 2 个元素,nums 变成 [3,2,0,0] ,最大子段和为子段 [3,2] 的和 5 。
查询 3:删除第 1 个元素,nums 变成 [3,0,0,0] ,最大子段和为子段 [3] 的和 3 。
查询 4 :删除第 0 个元素,nums变成 [0,0,0,0] ,最大子段和为 0 ,因为没有任何子段存在。 所以,我们返回 [16,5,3,0] 。
提示:
n == nums.length == removeQueries.length
1 <= n <= 1e5 1 <= nums[i] <=1e9
0 <= removeQueries[i] < n
removeQueries 中所有数字 互不相同 。
解析:
- 利用反向思考,把删除转化为添加元素(从末尾到开头逐个添加)
- 假如原来元素为 a b c ,现在需要添加c,就需要将b与a、c连接,a、c可能为一个元素集合,可以使用并查集处理集合合并。
- 实际上,我们只需要将b,c(也就是元素x,x+1合并)合并即可(同时利用并查集将其所有元素值合并),不需要向左合并(如果将a、c同时与b合并,那么下次添加a的时候会二次合并b,造成重复)。
- 又怎么能保证abc会作一个子段出现呢?
- 如果a先删除,那么b先添加,bc合并,当添加a的时候也会向右合并把abc合并起来;
- 如果a后删除,那么ab已经合并为一个元素,那么合并bc其实也就是合并ab 与c。因此,只需要向右合并即可。
代码:
lass Solution {public:int fa[100001];// 寻找父节点,状态压缩int find(int x){if(fa[x]!=x){fa[x]=find(fa[x]);return fa[x];} else return x;}vector<long long> maximumSegmentSum(vector<int>& nums, vector<int>& removeQueries) {int n=nums.size();// 并查集数组初始化for(int i=0;i<n+1;i++)fa[i] = i;long long sum[n+1];memset(sum,0,sizeof(sum));vector<long long> ans(n,0);for(int i=n-1;i>0;i--){//cout<<i<<endl;int x=removeQueries[i];int to = find(x+1);fa[x] = to;// 添加节点更新集合所有元素和的值sum[to] += nums[x] + sum[x];// 新的子段,与原有子段最大值的最大值作为此状态下的结果ans[i-1] = max(ans[i],sum[to]);}return ans;}
};
做法来源:视频讲解
2382. 删除操作后的最大子段和--(phase2--day3)相关推荐
- LeetCode 2382. 删除操作后的最大子段和
LeetCode 2382. 删除操作后的最大子段和 倒叙 + 并查集 typedef long long LL; class Solution {public:vector<long long ...
- leetcode:2382. 删除操作后的最大子段和【逆向思维 + 并查集困难题 + 细节不懂】
分析 一个个删很难受 可以反过来一个个加 然后加的话回导致合并,所以用并查集 把当前的x和x + 1合并起来 更新每一段的和,把和聚集到find(x + 1)的这个代表元这里 ac code clas ...
- 数据结构学习笔记:顺序表的删除操作及其演化题目总结
目录 前言 例题 类似题目1 类似题目2 类似题目3 类似题目4 类似题目5 结语 前言 文章代码皆在Dev-C++ 5.11中测试,主要是总结一些方法,从而总结一些规律使自己进一步地深化学习内容,仅 ...
- mysql查询数据不变_mysql之delete删除记录后数据库大小不变
当DELETE后面跟条件的时候,则就会出现这个问题 delete from table_name where 条件 删除数据后,数据表占用的空间大小不会变. 不跟条件直接delete的时候. dele ...
- mysql 空位补0_MySQL 删除数据后物理空间未释放
MySQL 删除数据后物理空间未释放 1. 进入数据库目录: cd /var/lib/mysql/ 2. 备份要保存的数据库文件(切记!必须备份!部分数据库文件需要恢复!) mysqldump -h ...
- mysql之delete删除记录后数据库大小不变
当DELETE后面跟条件的时候,则就会出现这个问题 delete from table_name where 条件 删除数据后,数据表占用的空间大小不会变. 不跟条件直接delete的时候. dele ...
- mysql .myd_关于mysql 删除数据后(.MYD,MYI)物理空间未释放
关于mysql 删除数据后物理空间未释放 OPTIMIZE TABLE 当您的库中删除了大量的数据后,您可能会发现数据文件尺寸并没有减小.这是因为删除操作后在数据文件中留下碎片所致.OPTIMIZE ...
- 解决sqlite 删除记录后数据库文件大小不变
最的做的项目中要有到sqlite数据存储,写了测试程序进行测试,存入300万条记录,占用flash大小为 86.1M,当把表中的记录全部删除后发后数据库文件大小依然是 86.1M: 原因是: sqli ...
- 更新操作先删除缓存后更新DB,还是先更新DB后删除缓存问题???
以前自己在学校学习redis的时候还真没想到这么多,上班后看公司的项目代码,发现都是先更新DB,然后删除缓存,而且更新DB后不会立马将DB数据放入缓存,然而我以前不管是查询还是update都是操作完D ...
最新文章
- ADO.NET 2.0 Dataset和Datatable 新功能新特性
- O(n^2) 级别的排序算法
- android 中XML和对象转换利器Xstream的使用
- oracle 测试数据类型,oracle修改表字段的数据类型测试
- vs2010添加TSTCON( ActiveX Control Test Container )工具
- 3、Eternal框架-控制器
- minicom/picocom/cutecom/putty 安装与使用教程
- 浅析Thinkphp3.0的行为扩展模式
- 猜物品游戏java编程_小猿圈Java初学者练习小案例:猜数字游戏
- Oracle online系列(下):online indexbuild
- Hibernate中的merge方法
- 练习4.1 根据后序和中序遍历输出先序遍历 (25 分)
- 耳机煲机软件测试自学,乐味煲耳机软件教程 只需三步轻松煲耳机
- 计算机毕设 SpringBoot+Vue车辆租赁管理系统 网上汽车租赁系统 汽车租赁管理系统 汽车分时租赁系统Java Vue MySQL数据库 远程调试 代码讲解
- 2021有什么好的入耳式耳机推荐?耳机热销性价比牌子排行榜单推荐!
- 微信会员卡系统怎么开通,微信会员卡开发,会员管理系统,CSS :first-line 伪元素
- 举个栗子~Minitab 技巧(6):使用 T 检验 分析产品质量
- 希腊神话:希腊众神 宙斯和赫拉
- Uber 《Go语言编程规范》学习笔记(一)
- 图文结合带你搞懂MySQL日志之Error Log(错误日志)
热门文章
- phpstudy中的nginx开发Laravel的对应配置
- 开涛的springMVC教程读书笔记
- php仿小红书,Android仿小红书图片标签
- Kibana如何添加索引
- Java项目:酒店管理系统(java+SSM+Maven+LayUI+mysql)
- 在线网校系统有哪些优势
- Flutter学习之Dart语言注释
- Box2D v2.1.0用户手册(4)——碰撞模块(Collision Module)
- x265与HM编码性能对比
- python小工具开发_使用Python制作一个桌面小工具