力扣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;
    }
}
相关推荐
方也_arkling2 小时前
【Java-Day08】static / final / 枚举
java·开发语言
橙淮2 小时前
Spring Bean作用域与生命周期全解析
java·spring
Chengbei112 小时前
一站式源码安全检测工具、云安全 / APP / 小程序源码敏感信息递归多层目录扫描AK、JWT、手机号、身份证等敏感信息
java·开发语言·安全·web安全·网络安全·系统安全·安全架构
llz_1122 小时前
web-第一次课后作业
java·开发语言·idea
kkeeper~2 小时前
0基础C语言积跬步之数据在内存中的存储
c语言·数据结构·算法
秋92 小时前
Java项目运行5天左右自动宕机:系统性定位与解决方案
java·开发语言·python
小江的记录本2 小时前
【JVM虚拟机】垃圾回收GC:垃圾收集器:CMS:核心原理、回收流程、优缺点、废弃原因(附《思维导图》+《面试高频考点清单》)
java·jvm·后端·python·spring·面试·maven
2401_868534783 小时前
论企业网络设计
数据结构
DIY源码阁3 小时前
JavaSwing学生成绩管理系统 - MySQL版
java·数据库·mysql·eclipse
wabs6663 小时前
关于贪心算法的一些自我总结【力扣45.跳跃游戏II】【灵感来源:代码随想录】
算法·贪心算法·复盘