力扣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;
    }
}
相关推荐
zzu123zsw3 小时前
把条件校验收敛到枚举接口:Spring Boot 统一断言模式与零污染异常切面工程化
java·spring boot·后端·架构设计
SL_staff3 小时前
计划系统落地难?从开发者视角重构执行入口体验
java·开源·全栈
2501_933923253 小时前
双指针算法:移动零+复写零(Java)
数据结构·算法·双指针
和芯星通unicore4 小时前
卫星信号消失的地方,定位如何继续?——解密和芯星通DR 航位推算算法
人工智能·算法·gnss·智能驾驶gnss模块
鬼手点金4 小时前
单轮对话:最简单的 API 调用
java·服务器·前端·javascript·react.js·servlet·tomcat
牛牛牌蜡笔小新4 小时前
Java-常用类库
java·开发语言
Wang's Blog4 小时前
Java 项目实战: 交友项目 - MongoDB集群:概述
java·mongodb·交友
wangchunyu1144 小时前
JAVA ThreadLocal、伪共享与Disruptor
java
邵奈一4 小时前
让WorkBuddy用上OpenCode免费模型:Magpie小白教程
算法
慧都小项4 小时前
图解 MyEclipse Deployment Assembly:资源如何进入部署产物?
java·ide·tomcat·maven·myeclipse·部署排查