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)相关推荐

  1. LeetCode 2382. 删除操作后的最大子段和

    LeetCode 2382. 删除操作后的最大子段和 倒叙 + 并查集 typedef long long LL; class Solution {public:vector<long long ...

  2. leetcode:2382. 删除操作后的最大子段和【逆向思维 + 并查集困难题 + 细节不懂】

    分析 一个个删很难受 可以反过来一个个加 然后加的话回导致合并,所以用并查集 把当前的x和x + 1合并起来 更新每一段的和,把和聚集到find(x + 1)的这个代表元这里 ac code clas ...

  3. 数据结构学习笔记:顺序表的删除操作及其演化题目总结

    目录 前言 例题 类似题目1 类似题目2 类似题目3 类似题目4 类似题目5 结语 前言 文章代码皆在Dev-C++ 5.11中测试,主要是总结一些方法,从而总结一些规律使自己进一步地深化学习内容,仅 ...

  4. mysql查询数据不变_mysql之delete删除记录后数据库大小不变

    当DELETE后面跟条件的时候,则就会出现这个问题 delete from table_name where 条件 删除数据后,数据表占用的空间大小不会变. 不跟条件直接delete的时候. dele ...

  5. mysql 空位补0_MySQL 删除数据后物理空间未释放

    MySQL 删除数据后物理空间未释放 1. 进入数据库目录: cd  /var/lib/mysql/ 2. 备份要保存的数据库文件(切记!必须备份!部分数据库文件需要恢复!) mysqldump -h ...

  6. mysql之delete删除记录后数据库大小不变

    当DELETE后面跟条件的时候,则就会出现这个问题 delete from table_name where 条件 删除数据后,数据表占用的空间大小不会变. 不跟条件直接delete的时候. dele ...

  7. mysql .myd_关于mysql 删除数据后(.MYD,MYI)物理空间未释放

    关于mysql 删除数据后物理空间未释放 OPTIMIZE TABLE 当您的库中删除了大量的数据后,您可能会发现数据文件尺寸并没有减小.这是因为删除操作后在数据文件中留下碎片所致.OPTIMIZE ...

  8. 解决sqlite 删除记录后数据库文件大小不变

    最的做的项目中要有到sqlite数据存储,写了测试程序进行测试,存入300万条记录,占用flash大小为 86.1M,当把表中的记录全部删除后发后数据库文件大小依然是 86.1M: 原因是: sqli ...

  9. 更新操作先删除缓存后更新DB,还是先更新DB后删除缓存问题???

    以前自己在学校学习redis的时候还真没想到这么多,上班后看公司的项目代码,发现都是先更新DB,然后删除缓存,而且更新DB后不会立马将DB数据放入缓存,然而我以前不管是查询还是update都是操作完D ...

最新文章

  1. ADO.NET 2.0 Dataset和Datatable 新功能新特性
  2. O(n^2) 级别的排序算法
  3. android 中XML和对象转换利器Xstream的使用
  4. oracle 测试数据类型,oracle修改表字段的数据类型测试
  5. vs2010添加TSTCON( ActiveX Control Test Container )工具
  6. 3、Eternal框架-控制器
  7. minicom/picocom/cutecom/putty 安装与使用教程
  8. 浅析Thinkphp3.0的行为扩展模式
  9. 猜物品游戏java编程_小猿圈Java初学者练习小案例:猜数字游戏
  10. Oracle online系列(下):online indexbuild
  11. Hibernate中的merge方法
  12. 练习4.1 根据后序和中序遍历输出先序遍历 (25 分)
  13. 耳机煲机软件测试自学,乐味煲耳机软件教程 只需三步轻松煲耳机
  14. 计算机毕设 SpringBoot+Vue车辆租赁管理系统 网上汽车租赁系统 汽车租赁管理系统 汽车分时租赁系统Java Vue MySQL数据库 远程调试 代码讲解
  15. 2021有什么好的入耳式耳机推荐?耳机热销性价比牌子排行榜单推荐!
  16. 微信会员卡系统怎么开通,微信会员卡开发,会员管理系统,CSS :first-line 伪元素
  17. 举个栗子~Minitab 技巧(6):使用 T 检验 分析产品质量
  18. 希腊神话:希腊众神 宙斯和赫拉
  19. Uber 《Go语言编程规范》学习笔记(一)
  20. 图文结合带你搞懂MySQL日志之Error Log(错误日志)

热门文章

  1. phpstudy中的nginx开发Laravel的对应配置
  2. 开涛的springMVC教程读书笔记
  3. php仿小红书,Android仿小红书图片标签
  4. Kibana如何添加索引
  5. Java项目:酒店管理系统(java+SSM+Maven+LayUI+mysql)
  6. 在线网校系统有哪些优势
  7. Flutter学习之Dart语言注释
  8. Box2D v2.1.0用户手册(4)——碰撞模块(Collision Module)
  9. x265与HM编码性能对比
  10. python小工具开发_使用Python制作一个桌面小工具