题目一:打家劫舍

力扣题目链接

题目描述:

你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警

给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。

思路分析:代码随想录

经典dp问题,动归五部曲解决

解法: 

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

题目二:打家劫舍II

力扣题目链接

题目描述:

你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都 围成一圈 ,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警 。

给定一个代表每个房屋存放金额的非负整数数组,计算你 在不触动警报装置的情况下 ,今晚能够偷窃到的最高金额。

思路分析:代码随想录

与题一类似,加入了成环的问题,考虑三种情况

1、考虑不包含首尾元素

2、考虑不包含首元素,包含尾元素

3、考虑包含首元素,不包含尾元素

解法: 

class Solution {public int rob(int[] nums) {if (nums == null || nums.length == 0)return 0;int len = nums.length;if (len == 1)return nums[0];return Math.max(robAction(nums, 0, len - 1), robAction(nums, 1, len));}int robAction(int[] nums, int start, int end) {int x = 0, y = 0, z = 0;for (int i = start; i < end; i++) {y = z;z = Math.max(y, x + nums[i]);x = y;}return z;}
}

题目三:打家劫舍III

力扣题目链接

题目描述:

小偷又发现了一个新的可行窃的地区。这个地区只有一个入口,我们称之为 root 。

除了 root 之外,每栋房子有且只有一个“父“房子与之相连。一番侦察之后,聪明的小偷意识到“这个地方的所有房屋的排列类似于一棵二叉树”。 如果 两个直接相连的房子在同一天晚上被打劫 ,房屋将自动报警。

给定二叉树的 root 。返回 在不触动警报的情况下 ,小偷能够盗取的最高金额 。

思路分析:代码随想录

融合了二叉树的结构特点,需要熟悉树的遍历顺序,可以采用后序遍历,在递归三部曲中融入动归五部曲

解法: 


class Solution {public int rob(TreeNode root) {int[] res = robAction(root);return Math.max(res[0], res[1]);}int[] robAction(TreeNode root) {int res[] = new int[2];if (root == null)return res;int[] left = robAction(root.left);int[] right = robAction(root.right);res[0] = Math.max(left[0], left[1]) + Math.max(right[0], right[1]);res[1] = root.val + left[0] + right[0];return res;}
}

代码随想录训练营day48相关推荐

  1. 【代码随想录训练营】Day43-动态规划

    代码随想录训练营 Day43 今日任务 1049.最后一块石头的重量Ⅱ 494.目标和 474.一和零 语言:Java 1049. 最后一块石头的重量Ⅱ 链接:https://leetcode.cn/ ...

  2. 代码随想录训练营day8

    目录 题目一:反转字符串 解法一:数值交换 解法二:位运算 题目二:反转字符串|| 题目三:替换空格 解法一:双指针 解法二:使用额外空间 题目四:翻转字符串里的单词 解法一: 解法二:纯属娱乐 题目 ...

  3. 【代码随想录训练营】【Day14】第六章|二叉树|理论基础|递归遍历|迭代遍历|统一迭代

    理论基础 二叉树的定义形式有:节点指针和数组 在数组中,父节点的下标为i,那么其左孩子的下标即i*2+1,右孩子的下标即为i*2+2 二叉树的常见遍历形式有:前序遍历.后序遍历.中序遍历和层序遍历 前 ...

  4. 代码随想录训练营day56

    题目一:两个字符串的删除操作 力扣题目链接 题目描述: 给定两个单词 word1 和 word2 ,返回使得 word1 和  word2 相同所需的最小步数. 每步 可以删除任意一个字符串中的一个字 ...

  5. 代码随想录训练营day57

    题目一:回文子串 力扣题目链接 题目描述: 给你一个字符串 s ,请你统计并返回这个字符串中 回文子串 的数目. 回文字符串 是正着读和倒过来读一样的字符串. 子字符串 是字符串中的由连续字符组成的一 ...

  6. 代码随想录训练营day53

    题目一:最长公共子序列 力扣题目链接 题目描述: 给定两个字符串 text1 和 text2,返回这两个字符串的最长 公共子序列 的长度.如果不存在 公共子序列 ,返回 0 . 一个字符串的 子序列  ...

  7. 代码随想录训练营day55

    题目一:判断子序列 力扣题目链接 题目描述: 给定字符串 s 和 t ,判断 s 是否为 t 的子序列. 字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符 ...

  8. 代码随想录训练营day52

    题目一:最长上升子序列 力扣题目链接 题目描述: 给你一个整数数组 nums ,找到其中最长严格递增子序列的长度. 子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序. ...

  9. 代码随想录训练营day51

    题目一:最佳买卖股票时机含冷冻期 力扣题目链接 题目描述: 给定一个整数数组prices,其中第  prices[i] 表示第 i 天的股票价格 .​ 设计一个算法计算出最大利润.在满足以下约束条件下 ...

最新文章

  1. jquery入门 修改网页背景颜色
  2. Hello World on Impala
  3. SharePoint 账号
  4. Qt中的基础图形绘制
  5. python 条形图图注怎么集中注意力_如何用每个条形图的总和(Matplotlib)注释堆积条形图?...
  6. Java 7中的Try-with-resources
  7. 下载kaggle数据集的小妙招
  8. AD采样不准解决措施
  9. Apache Flink在 bilibili 的多元化探索与实践
  10. python查找文字在图片中的位置_图片中的文字竟然能如此快速提取?OCR文字识别功能简直太强大了...
  11. Lenovo Quick Fix 联想智能解决工具
  12. 王者荣耀空白代码_在线空白昵称代码复制
  13. 【Windows】打印机0x0000011b解决办法
  14. HTML转WordPress主题,[WP]将静态html网页制作成WordPress主题模版详细教程(四):小试牛刀...
  15. Rasa 3.x 学习系列-Rasa 3.1+ ElasticSearch 8.2.0 对话机器人实战六
  16. 32python腾讯位置大数据2.0版本成功输出北京位置数据(续接上2019年8月21日停止服务的内容)
  17. linux 操作excel文件,Linux下输出excel文件
  18. Linux搭建FTP服务使用案例
  19. 桌面计算机没反应是什么意思,点击显示桌面没反应? 显示桌面没反应解决方法...
  20. 网络流媒体--RTP和RTCP协议

热门文章

  1. winbox添加dhcp和nat
  2. python ssl连接 证书验证失败_python foursquare – SSL3证书验证失败
  3. 月薪8000的出租车司机给我上了震撼一课...
  4. 这一次,你打算怎么活?
  5. ubuntu+win7 在Thinkpad T400s上的双系统安装
  6. 用小灰熊做卡拉OK字幕
  7. STM32 超声波测距模块HC-SR04 驱动
  8. 2022《粤语好声音-乐队风暴》全国总决赛圆满收官!
  9. Mac 版64位 Chrome 浏览器进入 Canary 和 Dev 分支
  10. 【优秀毕设】基于OpenCV的人脸识别打卡/签到/考勤管理系统(最简基本库开发、可基于树莓派)