213. 打家劫舍 II golang 动态规划

题目

213. 打家劫舍 II
198. 打家劫舍
你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都围成一圈,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。

给定一个代表每个房屋存放金额的非负整数数组,计算你在不触动警报装置的情况下,能够偷窃到的最高金额。

解法

主要是理解不让首尾相连是什么意思!
第一个元素到倒数第二个元素的最大值 m
第二个元素到倒数第一元素的最大值 n

代码

func rob(nums []int) int {if len(nums) == 0 {return 0}if len(nums) == 1 {return nums[0]}m := rob_one_nine_eight(nums[1:len(nums)])n := rob_one_nine_eight(nums[0:len(nums)-1])fmt.Println(m,n)if m > n {return m}return n//fmt.Println(nums[1:len(nums)])//fmt.Println(nums[0:len(nums)-1])
}func rob_one_nine_eight(nums []int) int {curr := 0prev := 0for _, key := range nums {temp := currcurr = max(prev+key, curr)prev = temp}return curr
}func max(n, m int) int {if n > m {return n} else {return m}
}

作者:HodgeKou
链接:https://leetcode-cn.com/problems/house-robber-ii/solution/go-213-by-hodgekou/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

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

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

相关文章

343. 整数拆分 golang 动态规划

题目 整数拆分 给定一个正整数 n,将其拆分为至少两个正整数的和,并使这些整数的乘积最大化。 返回你可以获得的最大乘积。 示例 1: 输入: 2 输出: 1 解释: 2 1 1, 1 1 1。 示例 2: 输入: 10 输出: 36 解释: 10 3 3 4, 3 3 4 36。 说明: 你…

279. 完全平方数 golang 动态规划

题目 类似题目:322. 零钱兑换 279. 完全平方数 给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, …)使得它们的和等于 n。你需要让组成和的完全平方数的个数最少。 示例 1: 输入: n 12 输出: 3 解释: 12 4 4 4. 示例…

动态规划-01背包问题详解

read,write,comprehend

322. 零钱兑换 golang 动态规划

题目 零钱兑换 给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。 示例 1: 输入: coins [1, 2, 5], amount 11 输出: 3 解释: 11 5 5 1 示例 2: 输入…

377. 组合总和 Ⅳ golang 动态规划

题目 377. 组合总和 Ⅳ 类似322 给定一个由正整数组成且不存在重复数字的数组,找出和为给定目标正整数的组合的个数。 示例: nums [1, 2, 3] target 4 所有可能的组合为: (1, 1, 1, 1) (1, 1, 2) (1, 2, 1) (1, 3) (2, 1, 1) (2, 2) (3, 1) 请注意…

LeetCode上读不懂题!看不懂测试用例的那些题(有生之年更新。。。)

文章目录599. 两个列表的最小索引总和521. 最长特殊序列 Ⅰ645. 错误的集合小彩蛋599. 两个列表的最小索引总和 假设Andy和Doris想在晚餐时选择一家餐厅,并且他们都有一个表示最喜爱餐厅的列表,每个餐厅的名字用字符串表示。 你需要帮助他们用最少的索…

746. 使用最小花费爬楼梯 golang 动态规划

746. 使用最小花费爬楼梯 746. 使用最小花费爬楼梯 数组的每个索引做为一个阶梯,第 i个阶梯对应着一个非负数的体力花费值 costi。 每当你爬上一个阶梯你都要花费对应的体力花费值,然后你可以选择继续爬一个阶梯或者爬两个阶梯。 您需要找到达到楼层顶…

474. 一和零 golang动态规划

474. 一和零 在计算机界中,我们总是追求用有限的资源获取最大的收益。 现在,假设你分别支配着 m 个 0 和 n 个 1。另外,还有一个仅包含 0 和 1 字符串的数组。 你的任务是使用给定的 m 个 0 和 n 个 1 ,找到能拼出存在于数组中…

518. 零钱兑换 II golang动态规划

518. 零钱兑换 II 给定不同面额的硬币和一个总金额。写出函数来计算可以凑成总金额的硬币组合数。假设每一种面额的硬币有无限个。 示例 1: 输入: amount 5, coins [1, 2, 5] 输出: 4 解释: 有四种方式可以凑成总金额: 55 5221 52111 511111 示例 2: 输入: amount 3, co…

494. 目标和 golang 动态规划

题目 494. 目标和 给定一个非负整数数组,a1, a2, …, an, 和一个目标数,S。现在你有两个符号 和 -。对于数组中的任意一个整数,你都可以从 或 -中选择一个符号添加在前面。 返回可以使最终数组和为目标数 S 的所有添加符号的方法数。 示…

1360. 日期之间隔几天 golang

1360. 日期之间隔几天 请你编写一个程序来计算两个日期之间隔了多少天。 日期以字符串形式给出,格式为 YYYY-MM-DD,如示例所示。 示例 1: 输入:date1 “2019-06-29”, date2 “2019-06-30” 输出:1 示例 2&#…

1154. 一年中的第几天 golang

1154. 一年中的第几天 给你一个按 YYYY-MM-DD 格式表示日期的字符串 date,请你计算并返回该日期是当年的第几天。 通常情况下,我们认为 1 月 1 日是每年的第 1 天,1 月 2 日是每年的第 2 天,依此类推。每个月的天数与现行公元纪…

1185. 一周中的第几天 golang

1185. 一周中的第几天 给你一个日期,请你设计一个算法来判断它是对应一周中的哪一天。 输入为三个整数:day、month 和 year,分别表示日、月、年。 您返回的结果必须是这几个值中的一个 {“Sunday”, “Monday”, “Tuesday”, “Wednesday…

golang time包梳理

import “time” 官方文档 func main() {fmt.Println(time.Now())// Parse解析一个格式化的时间字符串并返回它代表的时间fmt.Println(time.Parse("2006.01.02", "2012.02.11"))date : time.Now()// 判断两个时间是否相同,会考虑时区的影响&a…

179. 最大数 golang (自定义sort)

179. 最大数 给定一组非负整数,重新排列它们的顺序使之组成一个最大的整数。 示例 1: 输入: [10,2] 输出: 210 示例 2: 输入: [3,30,34,5,9] 输出: 9534330 说明: 输出结果可能非常大,所以你需要返回一个字符串而不是整数。 Code import ("so…

1356. 根据数字二进制下 1 的数目排序 golang

golang的自定义排序 根据数字二进制下 1 的数目排序 给你一个整数数组 arr 。请你将数组中的元素按照其二进制表示中数字 1 的数目升序排序。 如果存在多个数字二进制中 1 的数目相同,则必须将它们按照数值大小升序排列。 请你返回排序后的数组。 示例 1&#x…

LeetCode单链表题目测试代码(只需添加对应题目,本地即可debug)

本地模拟单链表 package single_listimport ("strconv" )/*** Definition for singly-linked list.* type ListNode struct {* Val int* Next *ListNode* }*/type ListNode struct {Val intNext * ListNode } // Add String method to use print func (l *L…

138. 复制带随机指针的链表 golang

138. 复制带随机指针的链表 这个题结构体特殊,需要更改上一篇博客的node结构体 给定一个链表,每个节点包含一个额外增加的随机指针,该指针可以指向链表中的任何节点或空节点。 要求返回这个链表的 深拷贝。 我们用一个由 n 个节点组成的链表…

160. 相交链表 golang

160. 相交链表 计算两个链表长度,让长的先走到两个链表一样长,然后找交点 编写一个程序,找到两个单链表相交的起始节点。 如下面的两个链表: 在节点 c1 开始相交。 示例 1: 输入:intersectVal 8, li…

86. 分隔链表 golang

86. 分隔链表 只把小的放在一边,大于的不用放到右边(这个题的题目比较晦涩,很多人说看不懂题,我也没看懂,解法也没什么特殊,半天没读懂题,看了别人的解法) 给定一个链表和一个特定值…