代码随想录day39 || 198 打家劫舍,213 打家劫舍||,337 打家劫舍|||

news/2024/9/13 11:40:37/文章来源:https://www.cnblogs.com/zhougongjin55/p/18377551

198 打家劫舍

func rob(nums []int) int {// 思路,动态规划// dp[i] 代表前下标为i能装的最大盗窃物品价值// 递推 dp[i] = max(dp[i-1], dp[i-2]+v(i)) // dp[i-1] 代表不偷物品i, dp[i-2]+v(i) 代表偷物品i,那么就不能偷i-1,因为题目要求不能相邻,所以考虑前i-2// dp[0] = 0, dp[1] = nums[0]// 正序遍历物品// printvar dp = make([]int, len(nums)+1)dp[0] = 0dp[1] = nums[0]for i := 1; i < len(nums); i++ {dp[i+1] = max(dp[i], dp[i-1]+nums[i])}fmt.Println(dp)return dp[len(nums)]
}

213 打家劫舍||

func rob(nums []int) int {// 相比打家劫舍1 多出一个限制就是首位相连,所以,我们划分两个数组,包含首,以及包含尾,然后对比// dp[i] 表示前i个房间偷盗最大金额// dp[i] = max(dp[i-1], dp[i-1]+v(i))// dp[0]=0, dp[1] = nums[0]// 遍历房间// printlength := len(nums)if length == 1{return nums[0]}var dp1 = make([]int, length) // 顾首不顾尾var dp2 = make([]int, length) // 顾尾不顾首dp1[1] = nums[0]dp2[1] = nums[1]for i := 1; i < length -1 ; i++ {dp1[i+1] = max(dp1[i], dp1[i-1]+nums[i])dp2[i+1] = max(dp2[i], dp2[i-1]+nums[i+1])}//fmt.Println(dp1, dp2)if dp2[length-1] > dp1[length-1]{return dp2[length-1]}return dp1[length-1]
}

337 打家劫舍|||

image

func rob(root *TreeNode) int {// 本题在于树形dp的定义以及递推公式,还要结合树的遍历顺序// dp = [2]int{} ,dp[0] 表示不偷取当前节点, dp[1] 表示偷当前节点// 递推公式:// cur.dp[0] = cur.left.maxdp + cur.right.maxdp   maxdp=max[dp[0],dp[1]]// cur.dp[1] = cur.left.dp[0] + cur.right.dp[0] + cur.Val// 初始化,空节点dp = [0,0]// 树后序遍历// printres := robTree(root)return max(res)
}func robTree(cur *TreeNode) [2]int {var dp = [2]int{}if cur == nil {return dp}var leftDP, rightDP [2]int// leftif cur.Left != nil {leftDP = robTree(cur.Left)}// rightif cur.Right != nil {rightDP = robTree(cur.Right)}// rootdp[0] = max(leftDP) + max(rightDP)dp[1] = leftDP[0] + rightDP[0] + cur.Val//fmt.Println(cur.Val, dp[0], dp[1])return dp
}
func max(res [2]int) int {if res[0] > res[1] {return res[0]}return res[1]
}

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

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

相关文章

CF 做题笔记

在这个随笔中,会有笔者的一些 CodeForces 做题笔记,包括但不限于思想、解题技巧、代码实现等。CF1926G Vlad and Trouble at MIT \(\texttt{*1900}\)。TAG: \(\texttt{树形 dp}\) \(dp_{i,S,P}\) 为 \(i\) 的子树内是否存在 S 和 P 的状态。 转移方程为:当 \(s_i\) 为 C 时 …

VulNyx-Secrets

扫端口扫描80端口发现有个secrets目录 还有个注释继续扫发现http://192.168.200.11/secrets/login_form.php 有这个登录框 估计就是要爆破 username就是brad了把密码爆破出来 bradley登录完成后有跳转要我们写ip随便写个127.0.0.1 发现他只接受纯数字那我们就把ip转化成纯数字然…

(更新至 8/23) 不是暑假的暑假的不是游记的游记

假期持续更新 Day1 - 8/23 因为在学校里待不下去了,所以订的十一点多的火车,打算八点钟就出门 结果教练在家长群里发我们十二点放假,所以我爸怕我赶不上就帮忙改签到一点半了 你说的对,但是为什么改成卧铺了??? 因此因为xfg的莫名其妙原因,还是决定十点钟出来 那么十点…

C++11新特性(一):语言特性

C++11新特性 总结C++11特性时发现整个内容较多,建议查看前先查看目录。 语言特性 右值引用 右值的分类为将亡值和字面量。将亡值就是将要销毁的对象以及临时的变量,字面量就是常量。左值就是变量。 右值引用,通常使用&&表示。 // 字面量 int a = 1; // a变量,左值;…

电脑更新有什么好处和坏处,怎么更新电脑呢

电脑更新,特别是操作系统和软件的更新,带来了多方面的好处和坏处。下面分别讨论这些方面,并介绍如何进行电脑更新。 一、好处: 1.安全性增强:系统更新通常包含安全补丁,用于修复已知的安全漏洞,保护你的电脑免受恶意软件和黑客攻击。 2.性能改进:软件开发者会不断优化软…

WPF 的 await Application.Current.Dispatcher.InvokeAsync,Func 如果是Task , 等待赋值可能存在没有等待执行完成的问题

最近在检查我们组内的代码,发现好多用到await Application.Current.Dispatcher.InvokeAsync 相信好多WPF的开发都会用到 该方法做UI线程切换。但是细看里边的执行,发现了个别存在存在没有等待完成的情况 执行的结果是 i 为 null 值。 这也就说明了 执行了await Application.C…

dotnet 默认创建的 JsonContent 没有 Content Length 的内容头

本文记录一个 dotnet 的设计问题,默认创建出来的 JsonContent 对象的 Headers 里,是没有 Content-Length 信息的如下面代码创建一个 JsonContent 对象 using System.Net.Http.Json;var foo = new Foo();var jsonContent = JsonContent.Create(foo);class Foo {public int Val…

《Programming from the Ground Up》阅读笔记:p95-p102

《Programming from the Ground Up》学习第6天,p95-p102总结,总计8页。 一、技术总结 1.directive(伪指令) 很多资料喜欢把directive和instruction都翻译成“指令”,这样在看到指令这个词时就不知道到底指的是什么?这里参考其它人的做法,将directive称为“伪指令”。 2.re…

如何在 Nuxt 中动态设置页面布局

title: 如何在 Nuxt 中动态设置页面布局 date: 2024/8/24 updated: 2024/8/24 author: cmdragon excerpt: 摘要:本文介绍如何在Nuxt框架中通过设置setPageLayout函数动态调整页面布局,包括安装Nuxt、创建不同布局文件及中间件,并通过示例演示如何根据不同路径设置相应布局…