打家劫舍II
力扣 213. 打家劫舍 II
题目说明
你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都 围成一圈 ,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警 。
给定一个代表每个房屋存放金额的非负整数数组,计算你 在不触动警报装置的情况下 ,能够偷窃到的最高金额。
- 提示:
1 <= nums.length <= 1000 <= nums[i] <= 1000
示例
例1
1 | 输入:nums = [2,3,2] |
例2
1 | 输入:nums = [1,2,3,1] |
例3
1 | 输入:nums = [0] |
笔者理解
此题是一道动态规划算法问题,在力扣题库中被定义为中等题。
解法
当笔者阅读完此题后,发现此题很适用于动态规划,此题与198. 打家劫舍不同的是规定了首尾两栋房子不能同时偷,我们只要分成两种情况来分开讨论就好了,让我们来看看具体如何实现的吧。
实现
1 | public int rob(int[] nums) { |
时间和空间效率都还行,可见此解法还比较适合此题;
总结
本题是今天的每日一题,难度是为中等,感兴趣的朋友都可以去尝试一下,此题还有其他更多的解法,朋友们可以自己逐一尝试。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 徐年の博客!







