力扣labuladong——一刷day12

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • [一、力扣198. 打家劫舍](#一、力扣198. 打家劫舍)
  • [二、力扣213. 打家劫舍 II](#二、力扣213. 打家劫舍 II)
  • [三、力扣337. 打家劫舍 III](#三、力扣337. 打家劫舍 III)

前言


一、力扣198. 打家劫舍

java 复制代码
class Solution {
    public int rob(int[] nums) {
        int[] dp = new int[nums.length];
        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; i < nums.length; i ++){
            dp[i] = Math.max(dp[i-2] + nums[i], dp[i-1]);
        }
        return dp[nums.length-1];
    }
}

二、力扣213. 打家劫舍 II

java 复制代码
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 a = fun(nums,0,nums.length-2);
        int b = fun(nums, 1, nums.length-1);
        return Math.max(a,b);
    }
    public int fun(int[] nums, int low, int high){
        int[] dp = new int[nums.length];
        dp[low] = nums[low];
        dp[low+1] = Math.max(nums[low],nums[low+1]);
        for(int i = low+2; i <= high; i ++){
            dp[i] = Math.max(dp[i-2]+nums[i], dp[i-1]);
        }
        return dp[high];
    }
}

三、力扣337. 打家劫舍 III

java 复制代码
/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public int rob(TreeNode root) {
        int[] dp = fun(root);
        return Math.max(dp[0],dp[1]);
    }
    public int[] fun(TreeNode root){
        int[] dp = new int[2];
        if(root == null){
            return dp;
        }
        int[] dp1 = fun(root.left);
        int[] dp2 = fun(root.right);
        dp[0] = Math.max(dp1[0],dp1[1])+ Math.max(dp2[0],dp2[1]);
        dp[1] = dp1[0]+dp2[0] + root.val;
        return dp;
    }
}
相关推荐
JieE2127 小时前
LeetCode 226. 翻转二叉树|JS 递归超详细拆解,二叉树入门经典题
javascript·算法
JieE2128 小时前
LeetCode 104. 二叉树的最大深度|递归思路超详细拆解
javascript·算法
用户35218024547512 小时前
当 Prompt 学会"热更新":Spring Boot × Nacos3 AI 实战
java·spring boot·ai编程
vivo互联网技术12 小时前
CVPR 2026 | 全新强化学习框架 BeautyGRPO:重塑真实人像
算法·大模型·cvpr·影像
Darling噜啦啦13 小时前
列表转树算法深度解析:从 Map 到 Reduce 的两种实现,面试高频考点
数据结构·算法·面试
东坡白菜15 小时前
破局全栈:一个前端开发的Java入门实战记录(1)
java·全栈
唐青枫15 小时前
Java Tomcat 实战指南:从 Servlet 容器到 Spring Boot 部署
java
wsaaaqqq16 小时前
roudan:自由选择实体、灵活操作数据、快速写入数据库的 Java 框架
java
用户4978630507316 小时前
(一)小红的数组操作
算法·编程语言