From 5117a288422612c5e4a845d7ecdecff8448334d0 Mon Sep 17 00:00:00 2001 From: Bird Date: Thu, 28 Sep 2023 22:08:12 +0800 Subject: [PATCH] =?UTF-8?q?feat(0213=20=E6=89=93=E5=AE=B6=E5=8A=AB?= =?UTF-8?q?=E8=88=8D=E2=85=A1):=20=E4=BD=BFGo=E7=89=88=E6=9C=AC=E6=9B=B4?= =?UTF-8?q?=E7=AC=A6=E5=90=88Go=E4=B9=A0=E6=83=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- problems/0213.打家劫舍II.md | 44 +++++++++++++++++++-------------- 1 file changed, 25 insertions(+), 19 deletions(-) diff --git a/problems/0213.打家劫舍II.md b/problems/0213.打家劫舍II.md index cd9d596d..385c5867 100644 --- a/problems/0213.打家劫舍II.md +++ b/problems/0213.打家劫舍II.md @@ -225,32 +225,38 @@ class Solution: // 打家劫舍Ⅱ 动态规划 // 时间复杂度O(n) 空间复杂度O(n) func rob(nums []int) int { - if len(nums) == 1 { - return nums[0] + // 如果长度为0或1,那么有没有环的限制都一样 + if len(nums) <= 1 { + return robWithoutCircle(nums) } - if len(nums) == 2 { - return max(nums[0], nums[1]) - } - - result1 := robRange(nums, 0) - result2 := robRange(nums, 1) - return max(result1, result2) + + // 否则,去头或去尾,取最大 + res1 := robWithoutCircle(nums[:len(nums)-1]) + res2 := robWithoutCircle(nums[1:]) + + return max(res1, res2) } -// 偷盗指定的范围 -func robRange(nums []int, start int) int { +// 原始的打家劫舍版 +func robWithoutCircle(nums []int) int { + switch len(nums) { + case 0: return 0 + case 1: return nums[0] + } dp := make([]int, len(nums)) - dp[1] = nums[start] - - for i := 2; i < len(nums); i++ { - dp[i] = max(dp[i - 2] + nums[i - 1 + start], dp[i - 1]) + dp[0]=nums[0] + dp[1] = max(nums[0], nums[1]) + + for i:=2; i b { +func max(a, b int ) int { + if a>b { return a } return b