news 2026/4/18 11:29:45

第 173 场双周赛Q3——3796. 找到带限制序列的最大值

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
第 173 场双周赛Q3——3796. 找到带限制序列的最大值

题目链接:3796. 找到带限制序列的最大值(中等)

算法原理:

解法:双向约束传递

10ms击败54.10%

时间复杂度O(N)

①初始化约束数组:创建数组maxA记录每个位置的最大可行值,初始设为极大值(表示无约束),并固定a[0]=0
②应用硬限制:将restrictions中指定位置idx的最大允许值直接赋值给maxA[idx],优先满足显式位置限制
③左到右约束传递:遍历序列(从 1 到 n-1),确保每个位置i满足 a[i] ≤ a[i-1] + diff[i-1],取maxA[i]与该约束值的较小值更新maxA[i](保证不违反左到右的差值约束)
④右到左约束传递:反向遍历序列(从 n-2 到 0),确保每个位置i满足 a[i] ≤ a[i+1] + diff[i],同样取较小值更新maxA[i](保证不违反右到左的差值约束)
⑤计算最终结果:遍历maxA数组,取所有值中的最大值(且保证非负),转为 int 返回

Java代码:

class Solution { public int findMaxVal(int n, int[][] restrictions, int[] diff) { //初始化每个位置的最大可能值为极大值 long[] maxA=new long[n]; Arrays.fill(maxA,Long.MAX_VALUE); //初始条件:a[0]=0; maxA[0]=0; //应用限制条件:restrictions中的位置idx不能超过maxVal for(int[] r:restrictions){ int idx=r[0]; int maxVal=r[1]; maxA[idx]=maxVal; } //从左到右遍历:约束a[i]<=a[i-1]+diff[i-1] for(int i=1;i<n;i++) if(maxA[i-1]!=Long.MAX_VALUE) maxA[i]=Math.min(maxA[i],maxA[i-1]+diff[i-1]); //从右到左遍历:约束a[i]<=a[i+1]+diff[i] for(int i=n-2;i>=0;i--) if(maxA[i]!=Long.MAX_VALUE) maxA[i]=Math.min(maxA[i],maxA[i+1]+diff[i]); //计算序列中的最大值(保证非负) long maxVal=0; for(long val:maxA) maxVal=Math.max(maxVal,Math.max(val,0)); return (int)maxVal; } }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/17 20:13:53

智能硬件设计革命:基于FSM的Verilog代码自动生成器

一、硬件设计的“阿喀琉斯之踵” 在数字电路设计领域,有限状态机(FSM)如同人体的神经系统——无处不在却极其复杂。据统计,超过70%的芯片设计错误源自状态机的逻辑缺陷。一位资深硬件工程师平均每周需要手工编写3-5个状态机,每次编写都需要重复以下繁琐步骤: 定义状态编…

作者头像 李华
网站建设 2026/4/16 4:54:45

电商平台[淘宝|天猫|1688|京东|拼多多]图片搜索”接口获取数据全攻略

一、背景&#xff1a;为什么需要“以图搜款” 直播带货、社交电商、比价工具、ERP 选品、供应链爬虫都离不开“看到一张图&#xff0c;就能找到同款/相似款”的能力。各家官方把这项能力叫“拍立淘”“图搜”“拍照购”&#xff0c;但对外开放程度、接口形态、收费模式差异巨大…

作者头像 李华
网站建设 2026/4/18 10:04:53

不用写SQL!3分钟用GROUP BY构建数据分析原型

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 实现一个无代码数据分析工具&#xff0c;用户上传CSV文件后&#xff0c;通过拖拽字段即可生成GROUP BY分析&#xff1a;1) 拖拽维度字段到分组区域 2) 选择需要计算的指标(计数、求…

作者头像 李华