基本信息
文件名称:力扣740题,新手解题教程.pptx
文件大小:1.93 MB
总页数:8 页
更新时间:2025-05-29
总字数:约1.5千字
文档摘要

力扣740题删除并获得点数新手教程

题目重新分析与解读将问题转化为每个数字是否被选中的决策,使用动态规划记录最大点数,避免重复计算,实现高效求解。动态规划解题预先统计每个数字出现的频率,作为决策依据,简化问题为在不选取相邻数值的情况下获取最大点数。数字频率统计

现实生活场景类比选择高产果树优先收获,注意避免影响相邻种类,规划收获顺序以最大化总点数,如先收梨树(4)3棵得12点,优于先收苹果(3)桃树(5)。果园收获策略01通过评估每种果树的单株产值与数量,结合砍伐后果影响,制定最优收获路径,实现利益最大化。决策优化02

解题步骤详解处理特殊情况,dp[0],dp[1],dp[2],为后续计算准备基础值。初始化动态规划数组遍历dp数组,记录并返回过程中遇到的最大值,确保找到全局最优解。寻找全局最大值针对i≥3,dp[i]取dp[i-2]或dp[i-3]加当前数字总和的较大值,实现最优解追踪。动态规划递推公式

注意事项数字范围与边界条件题目数字1-10000,数组需覆盖,小心处理dp[0],dp[1],dp[2].空间与时间优化采用滚动数组节省空间,仅处理实际数字提升效率,正确初始化统计与dp数组.

代码实现与注释动态规划求解CopyCodeclassSolution{public:intnum1[10001];//用于统计每个数字的总和(数字×出现次数)Solution(){//初始化统计数组for(inti=0;i10001;i++){num1[i]=0;}}intdeleteAndEarn(vectorintnums){//统计每个数字的总和for(inti=0;inums.size();i++){num1[nums[i]]+=nums[i];}intdp[10001];//dp数组,dp[i]表示处理到数字i时的最大点数dp[0]=num1[0];//只有数字0的情况dp[1]=max(num1[0],num1[1]);//数字0和1中选较大的dp[2]=max(num1[0]+num1[2],num1[1]);//选0+2或选1intdpmax=dp[2];//记录当前最大值//动态规划递推for(inti=3;i10001;i++){//当前数字可以选择的前提是前一个数字没有被选//所以可以从i-2或i-3转移过来dp[i]=max(dp[i-2]+num1[i],dp[i-3]+num1[i]);dpmax=max(dpmax,dp[i]);//更新最大值}returndpmax;}};

问题与代码分析转换为打家劫舍类型,预处理统计,动态规划求解,关注非邻近数字选择。问题分析利用num1数组汇总数值,特殊初始化,状态转移求最优,记录全局最大,优化循环与空间使用。代码分析

谢谢