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

【代码随想录Day38】动态规划Part07

198.打家劫舍

题目链接/文章讲解:代码随想录
视频讲解:动态规划,偷不偷这个房间呢?| LeetCode:198.打家劫舍_哔哩哔哩_bilibili

class Solution {public int rob(int[] nums) {int n = nums.length;// 特殊情况处理if (n == 0)return 0;if (n == 1)return nums[0];if (n == 2)return Math.max(nums[0], nums[1]);int[] dp = new int[n + 1];dp[0] = 0; // dp[0]表示不偷任何房子的最大金额dp[1] = nums[0]; // dp[1]表示只偷第一个房子的最大金额for (int i = 2; i <= n; i++) {dp[i] = Math.max(dp[i - 1], dp[i - 2] + nums[i - 1]);}return dp[n]; // 返回偷取所有房子中的最大金额}
}

213.打家劫舍 II

题目链接/文章讲解:代码随想录
视频讲解:动态规划,房间连成环了那还偷不偷呢?| LeetCode:213.打家劫舍 II_哔哩哔哩_bilibili

class Solution {public int rob(int[] nums) {int n = nums.length;// 特殊情况处理if (n == 0)return 0;if (n == 1)return nums[0];if (n == 2)return Math.max(nums[0], nums[1]);// 定义一个方法来计算一维情况下的最大偷取金额return Math.max(robLinear(Arrays.copyOfRange(nums, 0, n - 1)), // 偷取第一个房子,不偷最后一个robLinear(Arrays.copyOfRange(nums, 1, n))); // 不偷第一个房子,偷取最后一个}private int robLinear(int[] nums) {int n = nums.length;if (n == 0)return 0;if (n == 1)return nums[0];int[] dp = new int[n + 1];dp[0] = 0;dp[1] = nums[0];for (int i = 2; i <= n; i++) {dp[i] = Math.max(dp[i - 1], dp[i - 2] + nums[i - 1]);}return dp[n];}
}

337.打家劫舍 III

题目链接/文章讲解:代码随想录
视频讲解:动态规划,房间连成树了,偷不偷呢?| LeetCode:337.打家劫舍 3_哔哩哔哩_bilibili

class Solution {public int rob(TreeNode root) {int[] result = dfs(root);return Math.max(result[0], result[1]);}private int[] dfs(TreeNode node) {if (node == null) {return new int[2]; // 返回 {0, 0},表示偷和不偷的金额都为0}int[] left = dfs(node.left);   // 左子树的结果int[] right = dfs(node.right); // 右子树的结果// dp[0]表示偷取当前节点的最大金额,dp[1]表示不偷取当前节点的最大金额int[] dp = new int[2];dp[0] = node.val + left[1] + right[1]; // 偷当前节点,左右子节点不能偷dp[1] = Math.max(left[0], left[1]) + Math.max(right[0], right[1]); // 不偷当前节点,左右子节点可以选择偷或不偷return dp;}
}

http://www.mrgr.cn/news/46256.html

相关文章:

  • vue路由缓存问题
  • 【springboot入门之YAML使用】
  • 非刚性点云配准 Non-rigid registration of two surfaces.SHREC 14 Human 数据集
  • 一键从想法到上线:Bolt.new重新定义全栈开发流程
  • ubuntu22.04的wayland协议修改掉,因为很多软件不支持
  • [vue/no-use-v-if-with-v-for] v-for 和 v-if 在同一个元素中的处理方法
  • Java中System类和RunTime类的Api
  • HTML5实现古典音乐网站源码模板1
  • 洞察AI趋势:智享AI直播,打造专属你的数字化直播AIGC系统!
  • 【JavaScript】事件 - 实现元素拖拽至画布
  • linux 禁用ipv6
  • Nacos 与 Eureka、Zookeeper 和 Consul 等其他注册中心的区别
  • WEB安全该学习哪些知识
  • 11、论文阅读:无监督夜间图像增强:层分解与光效抑制的结合
  • Qt C++设计模式->中介者模式
  • 带你了解linux:学习第十二课 linux 之 sort
  • 抓包工具检测手把手教学 - 某招聘网站
  • 详情说明HTTP/2和HTTP/3两者间的区别
  • python-读写Excel:openpyxl-(3)单元格样式设置
  • 第27周:Transformer实战:文本分类