当前位置: 首页 > news >正文

代码随想录第四十八天

代码随想录第四十八天

    • Leetcode 198. 打家劫舍I
    • Leetcode 213. 打家劫舍 II
    • Leetcode 337. 打家劫舍 III

Leetcode 198. 打家劫舍I

题目链接: 打家劫舍I
自己的思路:想不太出来递推公式!!!!

正确思路:这个题主要是看是否偷第下标为i的房间;直接动规五部曲:1、dp数组的含义:dp[i]表示从下标0到下标i(包括下标i,但不一定偷下标i)所能偷到的最大金钱数;2、递推公式:分为偷下标i和不偷下标i,如果偷下标i的话,那么0-i的最大金钱数就是之前偷的最大金钱数也就是dp[i-2],因为没法偷下标为i-1的房间;那么当不偷下标i的话,那么0-i的最大金钱数就是dp[i-1]了,两者中取最大值;3、dp数组初始化:由于当前的最大金钱和前面两个状态有关,所以所有的值一定是和dp[0]和dp[1]有关,dp[0]表示0-0的最大金钱,所以一定选下标为0的房间,dp[1]是0-1的最大金钱,所以只能选一个,选最大者即可;4、遍历顺序:由于是找包含最后一个房间的最大金钱,所以一定要从前向后遍历才可以!5、打印dp数组:主要用于debug!!!!

代码:

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[] 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++){//递推公式(偷第i天和不偷第i天)//从小到大遍历dp[i] = Math.max(dp[i-2]+nums[i],dp[i-1]);}return dp[nums.length-1];}
}

Leetcode 213. 打家劫舍 II

题目链接: 打家劫舍 II
自己的思路:不好处理环的问题!!!

正确思路:将环的问题处理成两个子问题:一个是不考虑最后一间房间,一个是不考虑第一间房间,然后根据这两种线性情况求最大值,线性情况就是打家劫舍一的情况,这里我们对打家劫舍一的代码做了优化,使用三个变量来代替原来的dp数组!!!!

代码:

class Solution {public int rob(int[] nums) {int len = nums.length;if (len==1) return nums[0];//两种情况取最大值return Math.max(robaction(Arrays.copyOfRange(nums,0,nums.length-1)),robaction(Arrays.copyOfRange(nums,1,nums.length)));}//打家劫舍一的代码简化版public int robaction(int[] nums){int x=0,z=0,y;for (int num:nums){y = z;z = Math.max(x+num,y);x = y;}return z;}
}

Leetcode 337. 打家劫舍 III

题目链接: 打家劫舍 III
自己的思路:好难!!!!

正确思路:树形dp没接触过,完全没有思路!!!这道题要使用后序遍历来递归二叉树,因为我们要求左右子树所能偷到的最多的钱,然后再求中间节点所能偷到最多的钱,一次次向上递归,最后返回给根节点!递归三部曲:1、递归参数和返回值:递归参数就是当前节点,返回值是一个维度为2的一维数组res(这里我们选择res[0]表示偷当前节点,res[1]表示不偷当前节点);2、终止条件:当当前节点为null时,直接返回全为0的一维数组即可!3、单层逻辑:这里我们拿一点节点来说明:当偷当前结点的房间时,那么一定不能偷左右孩子的房间,val=node.val+left[1]+right[1];当不偷当前结点的房间时,我们要分情况进行讨论,因为我们不一定必须偷左右孩子的房间,我们要从中选择最大值来判断,所以val=max(left[0],left[1])+max(right[0],right[1]),然后将这两个数组成一维数组返回即可!!!!

代码:

class Solution {public int rob(TreeNode root) {//索引0表示偷 索引1表示不偷int[] res = robac(root);return Math.max(res[0],res[1]);}public int[] robac(TreeNode node){if (node==null) return new int[2];int[] left = robac(node.left);int[] right = robac(node.right);//偷当前结点int val1 = node.val + left[1]+right[1];//不偷当前节点int val2 = Math.max(left[0],left[1])+Math.max(right[0],right[1]);return new int[]{val1,val2};}
}

相关文章:

代码随想录第四十八天

代码随想录第四十八天 Leetcode 198. 打家劫舍ILeetcode 213. 打家劫舍 IILeetcode 337. 打家劫舍 III Leetcode 198. 打家劫舍I 题目链接: 打家劫舍I 自己的思路:想不太出来递推公式&#xff01;&#xff01;&#xff01;&#xff01; 正确思路:这个题主要是看是否偷第下标为…...

书写自动智慧:探索Python文本分类器的开发与应用:支持二分类、多分类、多标签分类、多层级分类和Kmeans聚类

书写自动智慧&#xff1a;探索Python文本分类器的开发与应用&#xff1a;支持二分类、多分类、多标签分类、多层级分类和Kmeans聚类 文本分类器&#xff0c;提供多种文本分类和聚类算法&#xff0c;支持句子和文档级的文本分类任务&#xff0c;支持二分类、多分类、多标签分类…...

前端Webpack面试题

1.说说你对webpack的理解 ​ 开发时&#xff0c;我们会使用框架 (React、Vue) &#xff0c;ES6 模块化语法&#xff0c;Less/Sass 等 CSS 预处理器等语法进行开发&#xff0c;这样的代码要想在浏览器运行必须经过编译成浏览器能识别的 JS、CSS语法才能运行。所以我们需要打包工…...

LabVIEW使用边缘检测技术实现彩色图像隐写术

LabVIEW使用边缘检测技术实现彩色图像隐写术 隐写术是隐藏信息的做法&#xff0c;以隐瞒通信的存在而闻名。该技术涉及在适当的载体&#xff08;如图像&#xff0c;音频或视频&#xff09;中插入秘密消息。在这些载体中&#xff0c;数字图像因其在互联网上的广泛使用而受到青睐…...

第一次参加计算机会议报告注意事项以及心得

计算机会议参会报告 注意事项参会前参会中参会后 参会心得 注意事项 接下来的会议注意事项分为&#xff1a;&#xff08;1&#xff09;参会前&#xff0c;&#xff08;2&#xff09;参会中&#xff0c;&#xff08;3&#xff09;参会后 参会前 参会前&#xff0c;一般被邀请…...

TypeScript教程(二)基础语法与基础类型

一、基础语法 TypeScript由以下几个部分组成 1.模块 2.函数 3.变量 4.语句和表达式 5.注释 示例&#xff1a; Runoob.ts 文件代码&#xff1a; const hello : string "Hello World!" console.log(hello) 以上代码首先通过 tsc 命令编译&#xff1a; tsc …...

问道管理:网上如何打新股?

随着资本市场的不断敞开&#xff0c;越来越多的人开始重视股票市场&#xff0c;并想经过网上打新股来取得更大的出资收益。但是&#xff0c;网上打新股的办法并不简略&#xff0c;怎样才能成功地打新股呢&#xff1f;本文将从多个角度剖析&#xff0c;协助广阔出资者处理这一问…...

重磅更新,HertzBeat 集群版发布,易用友好的开源实时监控系统!

什么是 HertzBeat? HertzBeat 赫兹跳动 是一个拥有强大自定义监控能力&#xff0c;高性能集群&#xff0c;无需 Agent 的开源实时监控告警系统。 特点 集 监控告警通知 为一体&#xff0c;支持对应用服务&#xff0c;数据库&#xff0c;操作系统&#xff0c;中间件&#xf…...

.NET6使用微信小程序授权登录,获取手机号

1.在appsettings配置你的小程序配置信息 //微信小程序信息配置"WechatConfig": {"appid": "", //小程序ID"secret": "" //小程序秘钥},2.请求接口时先获取Access_token #region 获取小程序的Access_tokenpublic object GetA…...

游戏类APP如何提升用户的活跃度?

移动游戏行业&#xff0c;追求使用率的营销能发挥强大的功效&#xff0c;可帮助减少玩家流失、追回流失的玩家、提高活跃玩家所带来的价值以及增加付费玩家贡献的收入。 一、了解玩家需求 想要提升玩家的活跃&#xff0c;首先要知道&#xff0c;玩家喜欢玩哪些平台的游戏&…...

【Sklearn】基于支持向量机算法的数据分类预测(Excel可直接替换数据)

【Sklearn】基于支持向量机算法的数据分类预测(Excel可直接替换数据) 1.模型原理1.1 数学模型1.2 模型原理2.模型参数3.文件结构4.Excel数据5.下载地址6.完整代码7.运行结果1.模型原理 支持向量机(Support Vector Machine,SVM)是一种用于分类和回归的监督学习算法,其基本…...

抽象类与接口

一&#xff0c;类 定义类 部分与ES6用法基本一致。通过class定义类名&#xff0c;并通过constructor定义构造函数&#xff0c;通过super关键字来调用父类的方法。 class Person {name: string; // 属性constructor(name: string) { // 构造函数this.name name;}eat()…...

第三章,矩阵,09-线性方程组解的判断与求法、矩阵方程

第三章&#xff0c;矩阵&#xff0c;09-线性方程组解的判断与求法、矩阵方程 定理推论1推论2推论3推论4 矩阵方程AXB解法解的存在性推论 玩转线性代数(21)线性方程组解的判断与求法的笔记&#xff0c;相关证明以及例子见原文 定理 对n元线性方程组 A x b Axb Axb&#xff0c;…...

Vue-4.编译器VsCode

准备 Vue-1.零基础学习Vue Vue-2.nodejs的介绍和安装 Vue-3.vue简介 为什么用VsCode VsCode 是Vue官网首推的编译器它是完全免费的 下载安装VsCode 下载地址 安装的时候不停地下一步直到完成即可 安装插件 安装汉化插件 要将 Visual Studio Code&#xff08;VSCode&am…...

Neo4j之Aggregation基础

在 Neo4j 中&#xff0c;聚合&#xff08;Aggregation&#xff09;是对数据进行计算、汇总和统计的过程。以下是一些使用聚合函数的常见例子&#xff0c;以及它们的解释&#xff1a; 计算节点数量&#xff1a; MATCH (p:Person) RETURN count(p) AS totalPersons;这个查询会计…...

Python 函数

Built-in Functions — Python 3.11.4 documentation...

Spring(三):Spring中Bean的生命周期和作用域

前言 在 Spring 中&#xff0c;那些组成应用程序的主体及由 Spring IOC 容器所管理的对象&#xff0c;被称之为 bean。简单地讲&#xff0c;bean 就是由 IOC 容器初始化、装配及管理的对象&#xff0c;除此之外&#xff0c;bean 就与应用程序中的其他对象没有什么区别了。而 b…...

【AutoLayout案例03-设置底部按钮之间相同间距 Objective-C语言】

一、好,咱们继续啊 1.咱们继续把autoLayout介绍一下 咱们的自动布局 给大家介绍一下 那么,自动布局呢 继续咱们给大家做的案例 做几个例子 把这几个例子做完以后 我们再给它 我们再给大家说一下,如何通过代码,来实现自动布局 虽然说,通过代码来实现自动布局,并不推荐 但…...

代码随想录算法训练营20期|第七天|哈希表part02|454.四数相加II ● 383. 赎金信 ● 15. 三数之和 ● 18. 四数之和 ● 总结

454.四数相加II 比较巧思的解法&#xff0c;先把nums1 和nums2的数两两相加&#xff0c;并存储sum和次数 再在nums3和nums4里找对应和sum和为0的数值i,j Time: N^2 Space:N^2, 最坏情况下A和B的值各不相同&#xff0c;相加产生的数字个数为 n^2 class Solution {public int fo…...

NavMeshPlus 2D寻路插件

插件地址:h8man/NavMeshPlus&#xff1a; Unity NavMesh 2D Pathfinding (github.com) 我对Unity官方是深恶痛觉,一个2D寻路至今都没想解决,这破引擎早点倒闭算了. 这插件是githun的开源项目,我本身是有写jps寻路的,但是无法解决多个单位互相阻挡的问题(可以解决但是有性能问…...

SkyWalking 10.2.0 SWCK 配置过程

SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外&#xff0c;K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案&#xff0c;全安装在K8S群集中。 具体可参…...

基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销&#xff0c;平衡网络负载&#xff0c;延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...

深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法

深入浅出&#xff1a;JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中&#xff0c;随机数的生成看似简单&#xff0c;却隐藏着许多玄机。无论是生成密码、加密密钥&#xff0c;还是创建安全令牌&#xff0c;随机数的质量直接关系到系统的安全性。Jav…...

CMake基础:构建流程详解

目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...

解锁数据库简洁之道:FastAPI与SQLModel实战指南

在构建现代Web应用程序时&#xff0c;与数据库的交互无疑是核心环节。虽然传统的数据库操作方式&#xff08;如直接编写SQL语句与psycopg2交互&#xff09;赋予了我们精细的控制权&#xff0c;但在面对日益复杂的业务逻辑和快速迭代的需求时&#xff0c;这种方式的开发效率和可…...

前端导出带有合并单元格的列表

// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...

Golang dig框架与GraphQL的完美结合

将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用&#xff0c;可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器&#xff0c;能够帮助开发者更好地管理复杂的依赖关系&#xff0c;而 GraphQL 则是一种用于 API 的查询语言&#xff0c;能够提…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序

一、开发环境准备 ​​工具安装​​&#xff1a; 下载安装DevEco Studio 4.0&#xff08;支持HarmonyOS 5&#xff09;配置HarmonyOS SDK 5.0确保Node.js版本≥14 ​​项目初始化​​&#xff1a; ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...

Robots.txt 文件

什么是robots.txt&#xff1f; robots.txt 是一个位于网站根目录下的文本文件&#xff08;如&#xff1a;https://example.com/robots.txt&#xff09;&#xff0c;它用于指导网络爬虫&#xff08;如搜索引擎的蜘蛛程序&#xff09;如何抓取该网站的内容。这个文件遵循 Robots…...

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)

🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...