当前位置: 首页 > news >正文

力扣labuladong一刷day11拿下打家劫舍问题共3题

力扣labuladong一刷day11拿下打家劫舍问题共3题

文章目录

      • 力扣labuladong一刷day11拿下打家劫舍问题共3题
      • 一、198. 打家劫舍
      • 二、213. 打家劫舍 II
      • 三、337. 打家劫舍 III

一、198. 打家劫舍

题目链接:https://leetcode.cn/problems/house-robber/
思路:打劫必须隔1家,定义dp[i]表示截止到第i家,所能抢到的最大值。
递推公式 dp[i] = max(dp[i-1], dp[i-2]+nums[i]);
如果当前这家不偷,最大值就是dp[i-1],如果偷就是要隔一家dp[i-2]+nums[i]

class Solution {public int rob(int[] nums) {if (nums.length == 1) return nums[0];int[] dp = new int[nums.length];dp[0] = nums[0];dp[1] = Math.max(nums[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];}
}

由于只用到了前一天和前两天,所以还可以优化一下空间。

public int rob(int[] nums) {if (nums.length == 1) return nums[0];int a = nums[0], b= Math.max(nums[0], nums[1]);for (int i = 2; i < nums.length; i++) {int c = Math.max(b, a+nums[i]);a = b;b = c;}return b;}

二、213. 打家劫舍 II

题目链接:https://leetcode.cn/problems/house-robber-ii/
思路:直接划分为两个区间然后分别计算再比较。即nums[0, len-2] 和 nums[1, len-1]

class Solution {public int rob(int[] nums) {if (nums.length == 1) return nums[0];if (nums.length == 2) return Math.max(nums[0], nums[1]);int max = 0, a = nums[0], b = Math.max(nums[0], nums[1]);for (int i = 2; i < nums.length - 1; i++) {int c = Math.max(b, a+nums[i]);a = b;b = c;}max = b;a = nums[1];b = Math.max(nums[1], nums[2]);for (int i = 3; i < nums.length; i++) {int c = Math.max(b, a+nums[i]);a = b;b = c;}return max > b ? max : b;}
}

三、337. 打家劫舍 III

题目链接:https://leetcode.cn/problems/house-robber-iii/
思路:定义nums[2] 记录每个节点偷与不偷的状态。

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

相关文章:

  • 【AI视野·今日Robot 机器人论文速览 第六十五期】Mon, 30 Oct 2023
  • 除了chatGPT网站外,国内有些可以使用的AI网站 文心一言 讯飞星火 豆包 通义千问 人工智能网站 AI网站
  • 爱上C语言:操作符详解(下)
  • 软路由R4S+iStoreOS实现公网远程桌面局域网内电脑
  • Python中神奇的「type」,即可查看类型,又可以创建对象
  • Postman:API测试之Postman使用完全指南
  • [Python学习笔记]Requests性能优化之Session
  • spark性能调优 | 内存优化
  • 科学上网导致Adobe软件运行弹出This non-genuine Adobe app will be disabled soon,尝试解决办法
  • bug:Junit5报错,@SpringBootTest没有运行
  • C#语言的由来与发展历程
  • uart控制led与beep
  • QT绘图设备
  • 大数据-之LibrA数据库系统告警处理(ALM-12051 磁盘Inode使用率超过阈值)
  • torch - 张量Tensor常见的形式
  • 「前端早读君006」移动开发必备:那些玩转H5的小技巧
  • Angular数据绑定机制
  • IIS 10 PHP CGI 设置 PHP_INI_SCAN_DIR
  • Javascript设计模式学习之Observer(观察者)模式
  • JavaWeb(学习笔记二)
  • Java读取Properties文件的六种方法
  • java多线程
  • Java精华积累:初学者都应该搞懂的问题
  • java取消线程实例
  • MySQL数据库运维之数据恢复
  • node-sass 安装卡在 node scripts/install.js 解决办法
  • select2 取值 遍历 设置默认值
  • Spark VS Hadoop:两大大数据分析系统深度解读
  • SQLServer插入数据
  • webgl (原生)基础入门指南【一】
  • 工作中总结前端开发流程--vue项目
  • 诡异!React stopPropagation失灵
  • 和 || 运算
  • 记录:CentOS7.2配置LNMP环境记录
  • 猫头鹰的深夜翻译:Java 2D Graphics, 简单的仿射变换
  • 使用SAX解析XML
  • 腾讯优测优分享 | 你是否体验过Android手机插入耳机后仍外放的尴尬?
  • 线性表及其算法(java实现)
  • d²y/dx²; 偏导数问题 请问f1 f2是什么意思
  • AI又要和人类“对打”,Deepmind宣布《星战Ⅱ》即将开始 ...
  • # Java NIO(一)FileChannel
  • #Js篇:单线程模式同步任务异步任务任务队列事件循环setTimeout() setInterval()
  • #LLM入门|Prompt#2.3_对查询任务进行分类|意图分析_Classification
  • #宝哥教你#查看jquery绑定的事件函数
  • #基础#使用Jupyter进行Notebook的转换 .ipynb文件导出为.md文件
  • (2)(2.4) TerraRanger Tower/Tower EVO(360度)
  • (pt可视化)利用torch的make_grid进行张量可视化
  • (分享)一个图片添加水印的小demo的页面,可自定义样式
  • (附源码)spring boot公选课在线选课系统 毕业设计 142011
  • (附源码)springboot 智能停车场系统 毕业设计065415
  • (紀錄)[ASP.NET MVC][jQuery]-2 純手工打造屬於自己的 jQuery GridView (含完整程式碼下載)...
  • (没学懂,待填坑)【动态规划】数位动态规划
  • (十一)JAVA springboot ssm b2b2c多用户商城系统源码:服务网关Zuul高级篇
  • (转)c++ std::pair 与 std::make
  • ***检测工具之RKHunter AIDE