力扣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;
    }
}
相关推荐
花火|12 分钟前
算法训练营day58 图论⑧ 拓扑排序精讲、dijkstra(朴素版)精讲
算法·图论
寒士obj14 分钟前
Spring容器Bean的创建流程
java·后端·spring
掉鱼的猫26 分钟前
Spring AOP 与 Solon AOP 有什么区别?
java·spring
AI_RSER38 分钟前
遥感&机器学习入门实战教程|Sklearn 案例④ :多分类器对比(SVM / RF / kNN / Logistic...)
python·算法·机器学习·支持向量机·分类·sklearn
不是光头 强39 分钟前
axure chrome 浏览器插件的使用
java·chrome
初学小刘1 小时前
机器学习中的聚类与集成算法:从基础到应用
算法·机器学习·聚类
笨蛋不要掉眼泪1 小时前
Spring Boot集成腾讯云人脸识别实现智能小区门禁系统
java·数据库·spring boot
桃源学社(接毕设)1 小时前
云计算下数据隐私保护系统的设计与实现(LW+源码+讲解+部署)
java·云计算·毕业设计·swing·隐私保护
小苏兮1 小时前
【数据结构】树与二叉树:结构、性质与存储
数据结构
用户0332126663671 小时前
Java 将 Excel 转换为 HTML:解锁数据在线展示的无限可能
java·excel