代码随想录算法训练营第四十七天|● 198.打家劫舍 ● 213.打家劫舍II ● 337.打家劫舍III
创始人
2025-05-30 18:19:44
0

198 打家劫舍

看完题后的思路

在这里插入图片描述

看完题后的思路

  1. dp【i】:0-i的房间,所能获得的最大金钱数
  2. 当偷第i间房子的时候,有偷和不偷两种情况, 不偷,dp【i】=dp【i-1】 偷 dp【i】=dp【i-2】+v【i】
  3. 初始换 dp【0】=v【0】 dp【1】=max(v【0】,v【1】)
  4. 从左到右遍历

代码

public int rob(int[] nums) {int[] dp = new int[nums.length];if(nums==null||nums.length==0){return 0;}if(nums.length==1){return nums[0];}if(nums.length==2){return Math.max(nums[0],nums[1]);}dp[0]=nums[0];dp[1]=Math.max(nums[0],nums[1]);for(int i=2;idp[i]=Math.max(dp[i-1],dp[i-2]+nums[i]);}return dp[nums.length-1];}

213.打家劫舍II

看完题后的思路


对于 0-i,可以先偷 a=【0,i-1】,再头 b=【1,i】
if a =b,说明第一个和最后一个都没有偷,加上两端的一个最大值,这句话不对,如果加上最大值,例如加上最后一个,但是倒数第二个偷了,会出发报警,所以直接返回a,b最大值就行否则,直接返回a,b之间的最大值

class Solution {public int rob(int[] nums) {int[] dp1 = new int[nums.length];int[] dp2 = new int[nums.length];if(nums==null||nums.length==0){return 0;}if(nums.length==1){return nums[0];}if(nums.length==2){return Math.max(nums[0],nums[1]);}dp1[0]=nums[0];dp1[1]=Math.max(nums[0],nums[1]);dp2[1]=nums[1];dp2[2]=Math.max(nums[1],nums[2]);for(int i=2;idp1[i]=Math.max(dp1[i-1],dp1[i-2]+nums[i]);}for(int i=3;idp2[i]=Math.max(dp2[i-1],dp2[i-2]+nums[i]);}boolean b = dp1[nums.length - 2] == dp2[nums.length - 1];// if (nums.length>3&&b){//    return dp2[nums.length - 1]+Math.max(nums[0],nums[nums.length-1]);// }return Math.max(dp1[nums.length - 2] , dp2[nums.length - 1]);}
}

337.打家劫舍III

在这里插入图片描述

看完题目后的思路

本题是树形dp

  1. dp【0】 不选则本节点 ,dp【1】=选择本节点
  2. 递归终止条件
    if(root==null){return {0,0}}
  3. 递归
    left=f(root.left);
    right=f(root.right)
    选择当前节点时: left【1】+right【1】+root.val
    不选择当前节点时: max(left【0】,left【1】)+max(right【0】,right【1】)
    将上面两个值在数组中返回

代码

        public int rob(TreeNode root) {int[] ints = robDG(root);return Math.max(ints[0],ints[1]);}public int[] robDG(TreeNode root) {if (root==null){return new int[]{0,0}; }int[] left = robDG(root.left);int[] right = robDG(root.right);return new int[]{Math.max(left[0],left[1])+Math.max(right[0],right[1]),left[0]+right[0]+root.val};}

相关内容

热门资讯

【操作系统基础】操作系统的分类... 前言 这篇文章是操作系统基础的开始,收录于我是沐风晓月的《操作系统原理》专栏 文章目录前言一 .操...
生日的祝福语 生日的祝福语(精选120句)  在平平淡淡的学习、工作、生活中,大家一定都接触过祝福语吧,祝福语的种...
爱情的祝福成语有哪些 爱情的祝福成语有哪些  成语是中国传统文化的一大特色,有固定的结构形式和固定的说法,表示一定的意义,...
幼儿园送给教师节老师的祝福语 幼儿园送给教师节老师的祝福语(精选55句)  在日常的学习、工作、生活中,许多人都有过写祝福语的经历...
牛年春节新春祝福语 牛年春节新春祝福语  在我们平凡的日常里,说到祝福语,大家肯定都不陌生吧,祝福语的种类很多,可分为吉...
使用premake帮助生成VS... Premake :https://github.com/premake/premake...
画图解释一个汇编小例子 这是对应的C代码 int caller() {int temp1 = 125;int tem...
学习黑客十余年,如何成为一名高...   1. 前言  说实话,一直到现在,我都认为绝大多数看我这篇文章的读者...
春节的拜年祝福语 春节的拜年祝福语精选  春节要登场,鞭炮快乐响,下面是春节的拜年祝福语精选,一起来看一下吧。  1....
爱国的对联 爱国的对联  说起“爱国“,人们首先想到的是那些家喻户晓的爱国英雄,但其实还有豪言壮语的`爱国对联。...
中秋节散文随笔抒情 中秋一词,最早见于《周礼》。根据我国的古代历法,汉服中秋农历八月十五,在一年秋季的八月中旬,故称“中...
【B/S医院区域云LIS系统源... ▶  【云LIS系统源码说明】: ❶云LIS源码,系统完全采用B/S架构...
智慧政务一网通办云平台顶层设计... 本资料来源公开网络,仅供个人学习,请勿商用,如有侵权请联系...
HCIE-Cloud Comp... 我是它的题目,要就来先看看我咯 确认密码是否正确 错误出现场景:键盘大小键输入错误、手抖写错 操作:...
滑步处理 - 让动画脚步和移位... 游戏制作中,通常的做法是让动画播放跑步或者其他移动动画,然后让刚体跟着移...
春节祝福语41条 2021年精选春节祝福语锦集41条  让我高歌一曲海皮呗时特吐有,海皮呗时特吐有,海皮呗时特吐有,海...
“明天”的我们散文随笔 “明天”的我们散文随笔  现在的我们成年了,我只是希望,我在今天的每一丝微笑都比明天要灿烂,我的每一...
春节拜年祝福语短信 2020年精选春节拜年祝福语短信集合38条  愿你是清新的海风,鼓起白色的船帆;愿你是坚固的大船,剪...
大班教育随笔 大班教育随笔(通用20篇)  无论是身处学校还是步入社会,大家都写过随笔吗?随笔是过去社会较为流行的...
二维码及条形码智能检测软件(P... 摘要:二维码及条形码智能检测软件用于检测常用条形码和二维码,对其位置进行...