day81【leetcode】打家劫舍专题

文章目录

  • 前言
  • 一、打家劫舍(力扣198)【相邻两间房不能偷】
  • 二、打家劫舍 II(力扣213)【围成一圈 相邻两间房不能偷】
  • 三、打家劫舍 III(力扣337)【树形DP】
  • 每日一题day81:链表中的下一个更大节点(力扣1019)


前言

1、打家劫舍
2、打家劫舍Ⅱ
3、打家劫舍Ⅲ
4、链表中的下一个更大节点


一、打家劫舍(力扣198)【相邻两间房不能偷】

在这里插入图片描述
分析:

注意:dp[i]表示第i间房时,此时已经偷到的最大金额
每一间房都有偷和不偷两种情况
偷:需要确保不触发警报 dp[i-2]+nums[i]
不偷:dp[i-1];
dp[i] = Math.max(dp[i-2]+nums[i], dp[i-1]);

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

二、打家劫舍 II(力扣213)【围成一圈 相邻两间房不能偷】

在这里插入图片描述
分析:
分为左右两个部分 例如 1,2,3
可以分为左边:1,2;
右边:2,3;
对于左右两边分别进行1的操作,最后求最大值即可。

为什么要分两边: 原因在于首尾相连,如果包含首元素,不管偷不偷首元素,都不能包含尾元素。
同理 如果包含尾元素,不管偷不偷尾元素,都不能包含首元素。

需要额外处理 nums.length==2时的情况,因为不会执行右半部分,所以直接返回前两个元素的较大值即可

		if(nums.length==2){
            return Math.max(nums[0],nums[1]);
        }
class Solution {
public int rob(int[] nums) {
        if(nums.length==1){
            return nums[0];
        }
        int[] dp = new int[nums.length];
        int[] dp2 = new int[nums.length];
        dp[0] = nums[0];
        if(nums.length==2){
            return Math.max(nums[0],nums[1]);
        }
        dp[1] = Math.max(nums[0],nums[1]);
        //分为左右两个部分
        //左半部分
        for(int i=2;i<nums.length-1;i++){
            dp[i] = Math.max(dp[i-2]+nums[i],dp[i-1]);
        }
        //右半部分
        dp2[1] = nums[1];
        dp2[2] = Math.max(nums[1],nums[2]);
        for(int j=3;j<nums.length;j++){
            dp2[j] = Math.max(dp2[j-2]+nums[j],dp2[j-1]);
        }
        return Math.max(dp[nums.length-2],dp2[nums.length-1]);
    }
}

三、打家劫舍 III(力扣337)【树形DP】

在这里插入图片描述
在这里插入图片描述
分析:
注意选清楚二叉树的遍历方式,
其次,dp[]数组只需要记录当前结点偷与不偷的两个状态
dp[]数组不需要记录是哪一个结点,交给递归去做

注意:当不偷根节点时,左右结点不是必须要偷,左右结点也可以不偷,取决于左右节点偷的值大还是不偷的值大。

        //偷根节点
        val[0] = current.val+left[1]+right[1];
        //不偷根节点
        val[1] = Math.max(left[0],left[1])+Math.max(right[0],right[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 = new int[2];
        res = robTree(root);
        return Math.max(res[0],res[1]);
    }
    public  int[] robTree(TreeNode current){
        int[] val = new int[2];
        if(current == null) return val;
        int[] left = new int[2];
        int[] right = new int[2];
        left = robTree(current.left);
        right = robTree(current.right);

        //偷根节点
        val[0] = current.val+left[1]+right[1];
        //不偷根节点
        val[1] = Math.max(left[0],left[1])+Math.max(right[0],right[1]);
        return val;
    }
}

每日一题day81:链表中的下一个更大节点(力扣1019)

在这里插入图片描述

分析:
典型单调栈

public static int[] nextLargerNodes(ListNode head) {
            //单调栈?

            //求链表长度
            if(head == null) return null;
            ListNode cur = head;
            int size =1;
            while(cur.next!=null){
                cur = cur.next;
                size++;
            }
            int[] temp = new int[size];
            int[] res = new int[size];
            cur = head;
            int i = 0;
            while(cur!=null){
                temp[i] = cur.val;
                cur = cur.next;
                i++;
            }
            Stack<Integer> stack = new Stack<>();
            stack.push(0);
            for(int j=1;j<size;j++){
                //栈内是递增的
                if(!stack.isEmpty() && temp[stack.peek()]>=temp[j]){
                    //直接入栈即可
                    stack.push(j);
                }
                while(!stack.isEmpty() && temp[stack.peek()]<temp[j]){
                    i = stack.pop();
                    res[i] = temp[j];
                }
                stack.push(j);
            }
            return res;
        }

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java:jdk的安装以及hello world

由于本人头发较多&#xff0c;常常被认为是不用功的程序员&#xff1b;故&#xff0c;我来学学Java&#xff0c;希望我变秃了也变强了&#xff01; 首先是java的安装&#xff0c;根据我司java的建议&#xff0c;安装了jdk8与jdk17&#xff01;因为在众多的版本中&#xff0c;只…

《Netty》从零开始学netty源码(三十九)之PoolSubPage的内存分配

目录 PoolSubPage.allocategetNextAvail方法toHandle方法removeFromPool方法 PoolSubPage.allocate 上一篇我们介绍了PoolSubPage的简单知识&#xff0c;当我们需要PoolSubPage的内存时可调用allocate方法查找可分配二进制的位置&#xff0c;具体的源码过程如下&#xff1a; …

vite .env.test环境使用ant design vue ,打包后a-date-picker控件无法选择日期

前端开发后台管理系统&#xff0c;常用的UI库当属Element UI和 Ant Design Vue&#xff0c;但是前段时间遇到一个奇葩问题&#xff0c;在这里记录一下&#xff0c;防止小伙伴们踩坑。 后台系统&#xff0c;大家肯定都用过时间控件&#xff0c;本期我们使用的是ant design vue&…

网络-IP地址(嵌入式学习)

IP地址基本概念IPv4 五类&#xff1a;A B C D E特殊地址子网掩码子网号概念IPv6优势举个栗子基本概念 IP地址是Internet中主机的标识 IP地址&#xff08;Internet Protocol Address 互联网国际地址&#xff09;是一种在Internet上的给主机编址的方式&#xff0c;它主要是为互…

piwigo安装及初步使用

一 摘要 本文主要介绍piwigo 安装及初步使用&#xff0c;nginx \php\mysql 等使用 docker 安装 二 环境信息 2.1 操作系统 CentOS Linux release 7.9.2009 (Core)2.2 piwigo piwigo-13.6.0.zip三 安装 3.1安装资源下载 piwigo 请到官网下载https://piwigo.org 安装步骤也…

js非常的混乱怎么学才能入门呢?

前言 ES5还是要学的喔&#xff0c;里面有很多重要的概念&#xff0c;跟ES6有着很强的关联性&#xff0c;大致上包括&#xff1a; 变量声明 ES5 使用var关键字来声明变量&#xff0c;而 ES6 引入了 let 和 const 关键字&#xff0c;用于声明块级作用域的变量和常量。这些新的关…

MobPush创建推送

功能说明 MobPush提供遵循REST规范的HTTP接口&#xff0c;适用各开发语言环境调用。 IP绑定 工作台可以绑定服务器IP地址&#xff0c;未绑定之前所有IP均可进行REST API的调用&#xff0c;绑定后进仅绑定的IP才有调用权限。 调用地址 POSThttp://api.push.mob.com/v3/push/c…

坚鹏:《银行业数字化转型指导意见》政策解读及银行数字化转型

中国银保监会《关于银行业保险业数字化转型的指导意见》政策解读及银行数字化转型 课程背景&#xff1a; 很多银行存在以下问题&#xff1a; 不知道如何准确理解中国银保监会《关于银行业保险业数字化转型的指导意见》相关政策 不清楚中国银保监会《关于银行业保险业数字化…

TensorFlow 深度学习第二版:1~5

原文&#xff1a;Deep Learning with TensorFlow Second Edition 协议&#xff1a;CC BY-NC-SA 4.0 译者&#xff1a;飞龙 本文来自【ApacheCN 深度学习 译文集】&#xff0c;采用译后编辑&#xff08;MTPE&#xff09;流程来尽可能提升效率。 不要担心自己的形象&#xff0c;只…

L2-044 大众情人分数 25分

人与人之间总有一点距离感。我们假定两个人之间的亲密程度跟他们之间的距离感成反比&#xff0c;并且距离感是单向的。例如小蓝对小红患了单相思&#xff0c;从小蓝的眼中看去&#xff0c;他和小红之间的距离为 1&#xff0c;只差一层窗户纸&#xff1b;但在小红的眼里&#xf…

36岁大龄程序员被裁,找了2个月工作,年包从100万降到50万,要不要接?

为了找到工作&#xff0c;你愿意接受降薪多少&#xff1f; 一位36岁的杭州程序员问&#xff1a; 36岁被裁&#xff0c;找了2个月工作&#xff0c;年包从100万降到50万&#xff0c;真心纠结&#xff0c;要不要接&#xff1f; 网友们分成了旗帜鲜明的两派&#xff0c;一派人认为不…

【面试题】20个常见的前端算法题,你全都会吗?

现在面试中&#xff0c;算法出现的频率越来越高了&#xff0c;大厂基本必考 今天给大家带来20个常见的前端算法题&#xff0c;重要的地方已添加注释&#xff0c;如有不正确的地方&#xff0c;欢迎多多指正&#x1f495; 大厂面试题分享 面试题库 前后端面试题库 &#xff08;…

基于RDF本体模型和图数据库实现知识查询与推理

基于RDF本体模型和图数据库实现知识查询与推理 基于RDF本体模型和图数据库实现知识查询与推理一、案例本体模型解释二、数据构建与查询 Here’s the table of contents: 基于RDF本体模型和图数据库实现知识查询与推理 本文主要使用ONgDB图数据库和Neosemantics组件&#xff0c;…

运行时内存数据区之虚拟机栈——操作数栈

操作数栈 每一个独立的栈帧中除了包含局部变量表以外&#xff0c;还包含一个后进先出(Last-In-First-Out)的操作数栈&#xff0c;也可以称之为表达式栈(Expression Stack)。操作数栈&#xff0c;在方法执行过程中&#xff0c;根据字节码指令&#xff0c;往栈中写入数据或提取数…

《花雕学AI》06:抢先体验ChatGPT的九个国内镜像站之试用与综合评测

最近ChatGPT持续大火&#xff0c;大家们是不是在网上看到各种和ChatGPT有趣聊天的截图&#xff0c;奈何自己实力不够&#xff0c;被网络拒之门外&#xff0c;只能眼馋别人的东西。看别人在体验&#xff0c;看别人玩&#xff0c;肯定不如自己玩一把舒服的啊。 上一期&#xff0…

视图的使用

为什么引入视图&#xff08;Views&#xff09; 如果您读过其他类似的书&#xff0c;可能会看到这些书在介绍视图时列举了许多引入视图的原因。其中认为最重要的原因是维护数据的独立性。那么什么是数据的独立性呢&#xff1f; 早期信息系统的设计与开发多采用模块驱动方式&am…

如何使用Win10搭建我的世界Minecraft服务器

简单几步在windwos搭建我的世界服务器,并通过cpolar工具将本地服务暴露到公网连接 1. Java环境搭建 以windows10系统为例&#xff0c;配置java环境&#xff0c;搭建我的世界服务器,下载最新版java版本 Java Downloads | Oracle 选择exe文件&#xff0c;下载完成后双击安装包…

从Hive源码解读大数据开发为什么可以脱离SQL、Java、Scala

从Hive源码解读大数据开发为什么可以脱离SQL、Java、Scala 前言 【本文适合有一定计算机基础/半年工作经验的读者食用。立个Flg&#xff0c;愿天下不再有肤浅的SQL Boy】 谈到大数据开发&#xff0c;占据绝大多数人口的就是SQL Boy&#xff0c;不接受反驳&#xff0c;毕竟大…

开发者笑疯了! LLaMa惊天泄露引爆ChatGPT平替狂潮,开源LLM领域变天

来源: 新智源 微信号&#xff1a;AI-era Meta的LLaMA模型开源&#xff0c;让文本大模型迎来了Stable Diffustion时刻。谁都没想 谁能想到&#xff0c;一次意外的LLaMA泄漏&#xff0c;竟点燃了开源LLM领域最大的创新火花。 一系列表现出色的ChatGPT开源替代品——「羊驼家族」…

全网最详细,Jmeter性能测试-性能基础详解,接口关联与编写Java脚本(三)

目录&#xff1a;导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09;前言 接口关联 接口关联…