代码随想录第45天|● 198.打家劫舍 ● 213.打家劫舍II ● 337.打家劫舍III

news2024/12/28 18:15:11

文章目录

  • ● 198.打家劫舍
    • 思路
    • 代码
      • 1.dp数组
      • 两个变量
  • ● 213.打家劫舍II
    • 思路:
    • 代码
  • ● 337.打家劫舍III
    • 思路
    • 代码:

● 198.打家劫舍

在这里插入图片描述

思路

在这里插入图片描述

代码

1.dp数组

class Solution {
    public int rob(int[] nums) {
        if(nums.length==1)return nums[0];
        int[] dp=new int[nums.length];
        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];
    }
}

两个变量

class Solution {
    public int rob(int[] nums) {
        if(nums.length==1)return nums[0];
        // int[] dp=new int[nums.length];
        // dp[0]=nums[0];
        // dp[1]=Math.max(nums[0],nums[1]);
        int a=nums[0],b=Math.max(nums[0],nums[1]);
        int c=0;
        for(int i=2;i<nums.length;i++){
            c=Math.max(a+nums[i],b);
            a=b;
            b=c;
        }
        return b;
    }
}

● 213.打家劫舍II

在这里插入图片描述

思路:

考虑首部0到n-1或者1到n尾部。两种情况
在这里插入图片描述
在这里插入图片描述

代码

class Solution {
    public int rob(int[] nums) {
        // 2 n // 1 n-1 差为n-2或2
        int n=nums.length;
        if(n==0)return 0;
        if(n==1)return nums[0];
        int l=rob2(nums,0,n-1);
        int r=rob2(nums,1,n);
        return Math.max(l,r);
    }
    public int rob2(int[] nums,int l,int r) {
        int a=0,b=0,c=0;
        for(int i=l;i<r;i++){//i和 
            c=Math.max(b,a+nums[i]);
            a=b;
            b=c;
        }
        return b;
    }
}

● 337.打家劫舍III

在这里插入图片描述

思路

dp[0]不偷 dp[1]偷
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

代码:

/**
 * 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[] res = rob3(root);
        return Math.max(res[0], res[1]);
    }
    // 后序遍历
    public int[] rob3(TreeNode root) {
        int[] res = new int[2];
        if(root==null)return res;//空则返回{0,0}
        int[] left=rob3(root.left);
        int[] right=rob3(root.right);
        // 偷:左孩子不偷+ 右孩子不偷 + 当前节点偷
        res[1]=root.val+left[0]+right[0];
        //当前节点不偷
        // 不偷:Max(左孩子不偷,左孩子偷) + Max(右孩子不偷,右孩子偷)
        // root[0] = Math.max(rob(root.left)[0], rob(root.left)[1]) +
        // Math.max(rob(root.right)[0], rob(root.right)[1])
        res[0]=Math.max(left[0],left[1])+Math.max(right[0],right[1]);
        return res;
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1486945.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CentOS下安装Kafka3

kafka是分布式消息队列&#xff0c;本文讲述其在centos&#xff08;centos 7.5&#xff09;下的安装。安装过程可以参考其官方文档https://kafka.apache.org/36/documentation.html 首先在官网 https://kafka.apache.org/downloads 下载Kafka二进制文件&#xff08;官网的压缩包…

WordPress建站入门教程:如何在本地电脑搭建WordPress网站?

前面跟大家分享了『WordPress建站入门教程&#xff1a;如何安装本地WordPress网站运行环境&#xff1f;』&#xff0c;接下来boke112百科就继续跟大家分享本地电脑如何搭建WordPress网站。 小皮面板&#xff08;phpstudy&#xff09;的“软件管理 – 网站程序”虽然可以一键部…

2023年,我的年终总结

序言 2023年的年终总结一直拖到现在&#xff0c;想来是有多个原因吧&#xff1a;第一个应该是年底还有些事情没有完成&#xff0c;内心有所不甘&#xff1b;第二个应该是这一年似乎是很忙碌的一年&#xff0c;不知从何说起&#xff1b;第三个应该是对于自己这一年的收获&#…

AD22编译他人分享的集成库

Content 1. 新建集成库2. 添加工程文件3. 编译工程 从网上下载了很多封装库&#xff0c;但是不知道如何添加进去&#xff0c;折腾了一会儿弄明白了 1. 新建集成库 2. 添加工程文件 添加完之后是这个样子&#xff0c;总而言之就是把你需要的全部添加进来&#xff1a; 3. 编译工…

ER-NeRF实时对话数字人模型训练与部署

ER-NeRF是基于NeRF用于生成数字人的方法&#xff0c;可以达到实时生成的效果。 下载源码 cd D:\Projects\ git clone https://github.com/Fictionarry/ER-NeRF cd D:\Projects\ER-NeRF 下载模型 准备面部解析模型 wget https://github.com/YudongGuo/AD-NeRF/blob/master/…

STM32(6)中断

1.中断 1.1 中断的概念 STM32的中断&#xff1a; 1.2 中断优先级 用数字的大小表示中断优先级的高低&#xff0c;数字的范围&#xff1a;0000--1111&#xff08;二进制&#xff09;&#xff0c;即0-15&#xff0c;共16级优先级。 进一步对这4位二进制数进行划分&#xff0c;可…

java012 - Java集合基础

1、集合基础 1.1 集合概述 引用数据类型包括&#xff1a;类、接口、数组[] 1.2 ArrayList构造和添加方法 代码&#xff1a; 空集合对象&#xff1a;[] add() add(int index,E element): 1.3 ArrayList集合常用方法

前缀和 刷题笔记

关键在于 构造前缀和数组 类比前n项和 第n项和等于 前n-1项和加上当前项 s[n]s[n-1]a[n]; #include<iostream> #include<algorithm> #include<cstring> #include<cstdio> using namespace std; int n,m; const int N1e5100; int a[N],s[N]; int ma…

git标签操作

一.标签管理 1.理解标签 标签 tag &#xff0c;可以简单的理解为是对某次 commit 的⼀个标识&#xff0c;相当于起了⼀个别名,当我们需要回退到某个重要版本时&#xff0c;直接使⽤标签就能很快定位到 2.创建标签 ⾸先&#xff0c;切换到需要打标签的分⽀上,然后&#xf…

C语言程序与设计——函数(一)

函数式编程 在编程范式中有很多分类&#xff0c;面向对象式&#xff0c;命令式编程&#xff0c;声明式编程等&#xff0c;而函数式编程也是一种重要的编程范式。 函数式编程&#xff08;Functional Programming)&#xff0c;FP是一种将计算视为函数求值过程的编程范式&#xf…

volatile关键字的作用 以及 单例模式(饿汉模式与懒汉模式的区别及改进)

文章目录 &#x1f4a1;volatile保证内存可见性&#x1f4a1;单例模式&#x1f4a1;饿汉模式&#x1f4a1;懒汉模式&#x1f4a1;懒汉模式多线程版&#x1f4a1;volatile防止指令重排序 &#x1f4a1;volatile保证内存可见性 Volatile 修饰的变量能够保证“内存可见性”以及防…

【LeetCode】升级打怪之路 Day 11:栈的应用、单调栈

今日题目&#xff1a; Problem 1: 栈的应用 155. 最小栈 | LeetCode20. 有效的括号 | LeetCode150. 逆波兰表达式求值 | LeetCode Problem 2: 单调栈 496. 下一个更大元素 I739. 每日温度503. 下一个更大元素 II 目录 Problem 1&#xff1a;栈 - “先进后出”的应用LC 155. 最…

【Tomcat】The CATALINA_HOME environment variable is not defined correctly

文章目录 一、问题二、解决办法三、优化 一、问题 运行绿色版Tomcat时&#xff0c;单击apache-tomcat-9.0.27\bin\startup.bat时窗口一闪而过。 检查JAVA_HOME环境变量&#xff0c;可以发现并没有问题。 为了检查错误&#xff0c;将startup.bat程序使用文本编辑器打开&#x…

Vue2+ElementUI列表、表格组件的封装

Vue2ElementUI列表组件的封装&#xff1a;引言 在日常开发中&#xff0c;我们经常会遇到需要展示列表数据的场景。ElementUI 提供的 el-table 组件是一个功能强大的表格组件&#xff0c;可以满足大部分的需求。但是&#xff0c;在实际应用中&#xff0c;我们往往需要根据业务需…

Python | Conda安装包报错:PackagesNotFoundError

Conda在下载安装包时报错&#xff1a; PackagesNotFoundError: The following packages are not available from current channels:- XXXXXX&#xff08;包名&#xff09;有如下两种解决方法&#xff1a; 方法一&#xff1a;将conda-forge添加到搜索路径上 在命令行运行下方指令…

spring cloud 之 Netflix Eureka

1、Eureka 简介 Eureka是Spring Cloud Netflix 微服务套件中的一个服务发现组件&#xff0c;本质上是一个基于REST的服务&#xff0c;主要用于AWS云来定位服务以实现中间层服务的负载均衡和故障转移,它的设计理念就是“注册中心”。 你可以认为它是一个存储服务地址信息的大本…

14-RPC-自研微服务框架

RPC RPC 框架是分布式领域核心组件&#xff0c;也是微服务的基础。 RPC &#xff08;Remote Procedure Call&#xff09;全称是远程过程调用&#xff0c;相对于本地方法调用&#xff0c;在同一内存空间可以直接通过方法栈实现调用&#xff0c;远程调用则跨了不同的服务终端&a…

游戏框架搭建

使用框架的目标&#xff1a;低耦合&#xff0c;高内聚&#xff0c;表现和数据分离 耦合&#xff1a;对象&#xff0c;类的双向引用&#xff0c;循环引用 内聚&#xff1a;相同类型的代码放在一起 表现和数据分离&#xff1a;需要共享的数据放在Model里 对象之间的交互一般有三…

XUbuntu22.04之显示实时网速(二百一十八)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

【字符串】马拉车(Manacher)算法

本篇文章参考&#xff1a;比较易懂的 Manacher&#xff08;马拉车&#xff09;算法配图详解 马拉车算法可以求出一个字符串中的最长回文子串&#xff0c;时间复杂度 O ( n ) O(n) O(n) 因为字符串长度的奇偶性&#xff0c;回文子串的中心可能是一个字符&#xff0c;也可能是…