打家劫舍Ⅱ(LeetCode-213)

简介: 打家劫舍Ⅱ(LeetCode-213)

打家劫舍Ⅱ(LeetCode-213)


题目

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


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


示例 1:

输入:nums = [2,3,2]
输出:3
解释:你不能先偷窃 1 号房屋(金额 = 2),然后偷窃 3 号房屋(金额 = 2), 因为他们是相邻的。


示例 2:

输入:nums = [1,2,3,1]
输出:4
解释:你可以先偷窃 1 号房屋(金额 = 1),然后偷窃 3 号房屋(金额 = 3)。
     偷窃到的最高金额 = 1 + 3 = 4 。


示例 3:

输入:nums = [1,2,3]
输出:3


提示:


1 <= nums.length <= 100

0 <= nums[i] <= 1000


思路

当房间数不超过二,不需要考虑首尾


超过二时,因为不能同时偷首尾房间,所以可以分两种情况考虑


不偷最后一间情况:盗窃范围 n u m s [ 0 : n − 2 ]

不偷第一间情况:盗窃范围 n u m s [ 1 : n − 1 ]

二者取较大值


代码展示

class Solution
{
public:
    int rob(vector<int> &nums)
    {
        int n = nums.size();
        if (n == 1)
        {
            return nums[0];
        }
        int left = robRange(nums, 0, n - 2);
        int right = robRange(nums, 1, n - 1);
        return max(left, right);
    }
    int robRange(vector<int> &nums, int start, int end)
    {
        if (start == end)
        {
            return nums[start];
        }
        vector<int> dp(nums.size());
        dp[start] = nums[start];
        dp[start + 1] = max(nums[start], nums[start + 1]);
        for (int i = start + 2; i <= end; i++)
        {
            dp[i] = max(dp[i - 1], dp[i - 2] + nums[i]);
        }
        return dp[end];
    }
};
目录
相关文章
|
2月前
|
机器学习/深度学习
【洛谷 P1271】【深基9.例1】选举学生会 题解(计数排序)
**深基9.例1**选举学生会,使用计数排序解决。给定$n$(≤999)候选人和$m$(≤2000000)选票,需按投票数排序选票。输入含$n$,$m$及$m$个候选人编号;输出排序后编号。示例:5名候选人,10张选票,输出`1 2 2 2 2 2 2 2 5 5`。代码:用数组记录每个候选人得票数,遍历数组打印每个候选人按票数的编号。
14 0
|
3月前
|
Java
leetcode-198:打家劫舍
leetcode-198:打家劫舍
32 0
leetcode-198:打家劫舍
|
3月前
|
Java
leetcode-337:打家劫舍 III
leetcode-337:打家劫舍 III
34 0
|
3月前
|
Java
leetcode-213:打家劫舍 II
leetcode-213:打家劫舍 II
23 0
|
11月前
Leetcode:打家劫舍系列
Leetcode:打家劫舍系列
leetcode 315周赛 解题报告
leetcode 315周赛 解题报告
51 0
leetcode 337 打家劫舍III
leetcode 337 打家劫舍III
72 0
leetcode 337 打家劫舍III
leetcode 213 打家劫舍II
leetcode 213 打家劫舍II
77 0
leetcode 213 打家劫舍II
|
算法 Java 流计算
打家劫舍 III(LeetCode 337)
打家劫舍 III(LeetCode 337)
70 0