代码随想录算法训练营|day47

第九章 动态规划

  • 198.打家劫舍
  • 213.打家劫舍II
  • 337.打家劫舍III
  • 代码随想录文章详解

198.打家劫舍

dp[i]表示偷第i家及之前所能获取的最大金额
偷第i家:dp[i] = dp[i-2]+nums[i],不偷第i家:dp[i] = dp[i-1]

func rob(nums []int) int {if len(nums) == 0 {return 0}if len(nums) == 1 {return nums[0]}dp := make([]int, len(nums))dp[0] = nums[0]dp[1] = max(nums[0], nums[1])for i := 2; i < len(nums); i++ {dp[i] = max(dp[i-1], dp[i-2]+nums[i])}return dp[len(nums) - 1]
}

因为抢劫到的最高金额只与前两间房屋有关,故采用滚动数组优化

first := nums[0]second := max(nums[0], nums[1])for i := 2; i < len(nums); i++ {temp := secondsecond = max(first+nums[i], second)first = temp}return second

213.打家劫舍II

上题扩展:房屋是环状的,意味着第一个房子和最后一个房子不能同时偷,故求解max(不偷第一个房子,不偷最后一个房子)

func rob(nums []int) int {if len(nums) == 0 {return 0}if len(nums) == 1 {return nums[0]}if len(nums) == 2 {return max(nums[0], nums[1])}return max(rob1(nums[1:]), rob1(nums[:len(nums)-1]))
}func rob1(nums []int) int {first := nums[0]second := max(nums[0], nums[1])for i := 2; i < len(nums); i++ {temp := secondsecond = max(first+nums[i], second)first = temp}return second
}

337.打家劫舍III

后序遍历:通过递归函数的返回值进行下一步求解
偷当前节点,则当前节点的左右孩子都不能偷;不偷当前节点,则当前节点的左右孩子可偷可不偷,取两种可能性的最大值。

func rob(root *TreeNode) int {var help func(root *TreeNode) (int, int)help = func(root *TreeNode) (int, int) {if root == nil {return 0, 0}leftRob, leftNoRob := help(root.Left)rightRob, rightNoRob := help(root.Right)rob := root.Val + leftNoRob + rightNoRobnoRob := max(leftRob, leftNoRob) + max(rightRob, rightNoRob)return rob, noRob}return max(help(root))
}

代码随想录文章详解

198.打家劫舍
213.打家劫舍II
337.打家劫舍III

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

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

相关文章

RDD简介与基础编程

1. 什么是RDD&#xff1f; RDD&#xff08;Resilient Distributed Dataset&#xff09;叫做弹性分布式数据集&#xff0c;是Spark中最基本的数据处理模型。在代码中&#xff0c;RDD是一个抽象类&#xff0c;他代表着一个弹性的、不可变的、可分区的、里面的元素可并行计算的集…

android TextView 实现富文本显示

android TextView 实现富文本显示&#xff0c;实现抖音直播间公屏消息案例 使用&#xff1a; val tvContent: TextView helper.getView(R.id.tvContent)//自己根据UI业务要求&#xff0c;可以控制 图标显示 大小val levelLabel MyImgLabel( bitmap 自己业务上的bitmap )va…

第零章_计算机导论

0.1 计算机&#xff1a;辅助人脑的好工具 所谓的计算机就是一种计算器&#xff0c;而计算器其实是:『接受用户输入指令与数据&#xff0c;经由中央处理器的数学与逻辑单元运算处理后&#xff0c;以产生或储存成有用的信息』。因此&#xff0c;只要有输入设备(不管是键盘还是触摸…

UE5基于RumtimeFBXImport插件使用C++加载服务器上fbx文件方法

UE5的RumtimeFBXImport插件其实只能加载本机的fbx文件&#xff0c;要加载服务器上的fbx文件的话&#xff0c;需要先将该fbx文件下载到本地&#xff0c;然后再使用RumtimeFBXImport插件加载。 示例文件如下&#xff1a; #include "Loader/WebLoader.h" #include &quo…

HTML5:七天学会基础动画网页4

backgorund-size 值与说明 length(单位像素):设置背景图片高度和宽度&#xff0c;第一个值设置宽度&#xff0c;第二个值设置高度&#xff0c;如果只给出一个值&#xff0c;第二个是设置为auto。 percentage(百分比):以父元素的百分比来设置背景图像的宽度和高度&#xff0c…

CSS技巧:实现两个div在同一行显示的方法

css如何让两个div在同一行显示 - web开发 - 亿速云 在Web开发中&#xff0c;经常遇到需要将多个元素水平排列在同一行的情况。其中一个常见的需求是将两个div元素放置在同一行上&#xff0c;使它们并排显示。在本文中&#xff0c;我们将介绍几种实现这一效果的CSS方法。 1. 使…

TypeScript基础知识:类型推导和上下文类型化

在 TypeScript 中&#xff0c;类型推导和上下文类型化是两个重要的概念。它们使得代码编写更加简洁、可读性更高&#xff0c;并且帮助我们避免冗余的类型注解。本文将深入探讨这两个概念&#xff0c;并通过示例代码演示它们的用法和好处。 一、类型推导 类型推导是 TypeScript…

day06_菜单管理(查询菜单,添加菜单,添加子菜单,修改菜单,删除菜单,角色分配菜单,查询菜单,保存菜单,动态菜单)

文章目录 1 菜单管理1.1 表结构介绍1.2 查询菜单1.2.1 需求说明1.2.2 页面制作1.2.3 后端接口SysMenuSysMenuControllerSysMenuServiceMenuHelperSysMenuMapperSysMenuMapper.xml 1.2.4 前端对接sysMenu.jssysMenu.vue 1.3 添加菜单1.3.1 需求说明1.3.3 页面制作1.3.3 后端接口…

【git随笔,日常积累】

Git常用基础 branch 查看所有分支&#xff1a; git branch -a切换到分支&#xff1a;git checkout develop创建分支并切换到&#xff1a;git checkout -b develop创建一个新分支&#xff1a;git checkout --orphan new_branch --orphan 选项用于创建一个没有历史记录的分支 删…

腾讯云安装MYSQL远程连接不上解决方案

推荐安装步骤博客&#xff0c;写的很详细&#xff0c;如果不会安装的话&#xff0c;可以根据安装步骤一直走。 Windows10下超详细Mysql安装_win10安装mysql-CSDN博客 修改 my.cnf或者my.ini 找到里面bind-address将bind-address 127.0.0.1设置成bind-address 0.0.0.0&#x…

AI英语学习助手-帮助建立词库和句子-极简安装(python基于Django和 OpenAI GPT API的网站程序)

AI英语学习助手-帮助建立词库和句子-极简安装&#xff08;python基于Django和 OpenAI GPT API的网站程序&#xff09; 学了很久的英语&#xff0c;但是发现还是被单词困住了&#xff0c;天天查句子查单词太麻烦&#xff0c;现在有了Chat GPT&#xff0c;能够很好得帮助学习英语…

CSP-202109-2-非零段划分

CSP-202109-2-非零段划分 【70分思路-暴力枚举】 这段代码的目的是在给定一个由自然数&#xff08;非负整数&#xff09;组成的数组后&#xff0c;通过选择一个适当的正整数 p&#xff0c;将数组中所有小于 p 的数变为 0&#xff0c;从而使得数组中非零段的数量达到最大。这里…

使用 gma 绘制隋唐洛阳城

背景 最近河南文旅大伙&#xff0c;给家乡带了一波热度&#xff0c;想想又是王子又是公主&#xff0c;着实羡慕。出门在外&#xff0c;还是对加很有感觉得&#xff0c;不过很遗憾&#xff0c;本人不能为家乡做出贡献&#xff0c;只能使用这种小伎俩&#xff0c;稍稍展示&#…

【网络编程】理解客户端和服务器并使用Java提供的api实现回显服务器

目录 一、网络编程 二、客户端和服务器 三、客户端和服务器的交互模式 四、TCP 和 UDP UDP socket api 的使用 1、DatagramSoket 2、DatagramPacket TCP socket api 的使用 1、ServerSocket 2、Socket 一、网络编程 本质上就是学习传输层给应用层提供的 api&#x…

Leetcode 128. 最长连续序列

最长连续序列 给定一个未排序的整数数组 nums &#xff0c;找出数字连续的最长序列&#xff08;不要求序列元素在原数组中连续&#xff09;的长度。 请你设计并实现时间复杂度为 O(n) 的算法解决此问题。 示例 1&#xff1a; 输入&#xff1a;nums [100,4,200,1,3,2] 输出&am…

ARM简介

ARM&#xff1a;ARM是Advanced RISC Machine的缩写&#xff0c;意为高级精简指令集计算机。 英国ARM公司&#xff0c;2016年被软银创始人孙正义斥资320亿美元收购了。现在是软银旗下的芯片设计公司&#xff0c;总部位于英国剑桥&#xff0c;专注于设计芯片&#xff0c;卖芯片生…

揭秘:头部房企如何借助数据分析实现稳健发展?

房地产行业是我国国民经济中的重要支柱产业之一&#xff0c;在房地产市场供求关系发生重大变化的当下&#xff0c;房企面临多重挑战。Kyligence 服务的这家头部房企把发展的重点聚焦于内生&#xff0c;关注内生的转化率、接管的效率以及内生毛利率的提升&#xff0c;引入 Kylig…

基于springboot实现保险信息网站系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现保险信息网站系统演示 摘要 随着互联网的不断发展&#xff0c;现在人们获取最新资讯的主要途径来源于网上新闻&#xff0c;当下的网上信息宣传门户网站的发展十分的迅速。而保险产品&#xff0c;作为当下人们非常关注的一款能够给人们带来医疗、生活、养老或…

面试笔记系列七之多线程+分布式系统基础知识点整理及常见面试题

目录 多线程 介绍一下线程的生命周期及状态&#xff1f; 线程的sleep、wait、join、yield如何使用&#xff1f; sleep与yield方法的区别在于&#xff0c; 进程调度算法 创建线程有哪些方式&#xff1f; 什么是守护线程&#xff1f; ThreadLocal的原理是什么&#xff0c;…

当大语言模型遇到AI绘画-google gemma与stable diffusion webui融合方法-矿卡40hx的AI一体机

你有想过建一台主机&#xff0c;又能AI聊天又能AI绘画&#xff0c;还可以直接把聊天内容直接画出来的机器吗&#xff1f; 当Google最新的大语言模型Gemma碰到stable diffusion webui会怎么样&#xff1f; 首先我们安装stable diffusion webui(automatic1111开源项目&#xff…