力扣740题:删除并获得点数解题详解
06问题与代码分析目录01题目解析与理解02现实场景类比03解题步骤详解04关键注意事项05代码实现与注释
01题目解析与理解
题目要求说明操作规则明确动态规划适用性目标最大化点数每次选择删除一个元素`nums[i]`后,必须同时删除所有值为`nums[i]-1`和`nums[i]+1`的元素,且删除`nums[i]`时可获得对应点数值。通过一系列操作,计算如何选择删除顺序以获得最大累计点数,初始点数为0。因存在重叠子问题(如删除某数后影响后续选择),需通过状态转移优化计算。
若直接遍历原数组,无法高效处理数值的相邻关系,需先统计每个数值的总点数(如`sum[num]=numcount`)。需处理数值不连续的情况(如示例1中的`[3,4,2]`),需按数值范围动态规划而非原数组顺序。核心问题转化为如何避免相邻数值的冲突选择(类似打家劫舍问题),需通过预处理和状态转移方程解决。数值分布处理需定义`dp[i]`表示处理到数值`i`时的最大点数,并推导是否选择当前数值(`dp[i]=max(dp[i-1],dp[i-2]+sum[i])`)。状态定义与转移边界条件难点分析
输入输出示例解释示例1解析输入:nums=[3,4,2]预处理统计:sum=[0,0,2,3,4](数值2、3、4的总点数分别为2、3、4)。动态规划过程:dp[2]=max(dp[1],dp[0]+2)=2dp[3]=max(dp[2],dp[1]+3)=3dp[4]=max(dp[3],dp[2]+4)=6输出:6(删除4后删除2,点数累计4+2)。示例2解析输入:nums=[2,2,3,3,3,4]预处理统计:sum=[0,0,4,9,4](数值2出现2次,3出现3次,4出现1次)。动态规划过程:dp[2]=max(dp[1],dp[0]+4)=4dp[3]=max(dp[2],dp[1]+9)=9dp[4]=max(dp[3],dp[2]+4)=9输出:9(连续删除3次3,点数累计9)。
02现实场景类比
数字频率加权在本题中,每个数字的点数相当于其价值,而该数字在数组中出现的次数相当于权重。例如,数字3出现3次,则其总价值为3×3=9,这与现实中的商品单价×库存量的价值计算逻辑完全一致。点数与价值的对应关系离散化价值分布题目要求处理不连续的数字(如2,3,4),类似于现实中不同品类商品的价值差异。需通过哈希表或数组统计每个数字的总价值,形成类似“价值-库存”的映射表。重复数字的聚合多个相同数字可被一次性选择并获得其总价值,类似于批发采购场景——批量购买同一商品可获得更高收益,但需承担关联风险(删除相邻数字)。
删除操作的现实意义选择删除某个数字后必须移除相邻数字,这类似于投资中选择某一行业时需规避其上下游关联产业的风险。例如投资房地产需同步规避建材行业波动的影响。风险连锁反应机会成本显性化资源独占性约束删除操作本质是放弃相邻数字的潜在收益,如同商业决策中选择A方案必然牺牲B方案的机会成本。解题时需动态比较当前数字与相邻数字的收益权重。每次操作后相邻数字不可再用,类似于某些特许经营权场景——获得某区域代理权的同时,自动丧失相邻区域的竞争资格。
动态规划与投资组合题目中数字范围1≤nums[i]≤10^4,可类比有限时间窗口内的任务调度。将数字按大小排序后,转化为在时间线上选择互不冲突的任务以最大化收益,与LeetCode1235题(规划兼职工作)的核心思想相通。时间窗口优化博弈论中的占优策略当多个相同数字连续出现(如示例2的3,3,3),全选它们是最优策略,这类似于博弈论中的“重复博弈均衡”——在相同条件下持续执行同一策略可获得稳定收益。通过dp数组分阶段记录历史最大收益,类似基金经理每日调整持仓组合。dp[i]表示前i个数字的最优解,而状态转移方程dp[i]=max(dp[i-1],dp[i-2]+sum[i])对应“保持现状”或“当前投入+历史最优”的决策逻辑。最大收益的类比场景
03解题步骤详解
问题转化核心:将删除相邻元素约束转化为动态规划中「不能选择相邻元素」的经典问题,类似打家劫舍模型。预处理关键:通过桶排序思想统计数字总点数,将原始问题转化为序列选择问题。状态转移设计:dp[i]表示前i个数字能获得的最大点数,状态转移时需考虑是否选择当前数字。空间优化技巧:实际只需维护dp[i-1]和dp[i-2]两个变量,可将空间复杂度从O(max_num)降至O(1)。边界条件处理:需单独处理数字连续区间(如[1,2,3])和单个