动态规划-打家劫舍I-II

求解代码

java 复制代码
public int rob (int[] nums){
        int[] memo = new int[nums.length+1];
        Arrays.fill(memo, -1);
        return dp(nums,0, memo);
    }

    private int dp(int[] nums,int start,int[] memo){
        if(start>=nums.length){
            return 0;
        }

        if(memo[start]!=-1){
            return memo[start];
        }
        int ans = Math.max(dp(nums, start+1,memo),nums[start]+dp(nums, start+2,memo));
        memo[start]= ans;
        return ans;
    }

小贴士

记忆化存储+自顶向下

求解代码

java 复制代码
public int rob(int[] nums) {
        int n = nums.length;
        int[] memo1 = new int[n + 1];
        int[] memo2 = new int[n + 1];
        Arrays.fill(memo1, -1);
        Arrays.fill(memo2, -1);
        int case1 = dp(nums, 0, n - 2, memo1);
        int case2 = dp(nums, 1, n - 1, memo2);
        return Math.max(case1, case2);
    }

    private int dp(int[] nums, int start, int end, int[] memo) {
        if (start > end) {
            return 0;
        }

        if (memo[start] != -1) {
            return memo[start];
        }
        int ans = Math.max(dp(nums, start + 1, end, memo), nums[start] + dp(nums,
                start + 2, end, memo));
        memo[start] = ans;
        return ans;
    }

小贴士

现在的情况是第一房间和最后一个房间也相当于是相邻的,不能同时抢。

那么,首尾房间不能同时被抢,只可能有三种不同情况:

  • 都不被抢

  • 第一个房间被抢最后一间不抢

  • 最后一个房间被抢第一间不抢

不过,本题不需要三种情况都进行比较,因为房间里的钱数都是非负数,后两种情况对于房间的选择余地肯定比情况一大,所以只要比较情况二和情况三就行了。

代码也可以在【打家劫舍I】的【自顶向下+记忆化存储】基础上进行修改。

需要注意的是独立的子问题必须使用独立的记忆化缓存,不能共用,不然会造成缓存被覆盖的问题,所以这里需要使用两个memory。

相关推荐
波波0073 分钟前
每日一题:.NET 的 GC是如何分代工作的?
算法·.net·gc
风暴之零12 分钟前
变点检测算法PELT
算法
深鱼~12 分钟前
视觉算法性能翻倍:ops-cv经典算子的昇腾适配指南
算法·cann
李斯啦果13 分钟前
【PTA】L1-019 谁先倒
数据结构·算法
梵刹古音19 分钟前
【C语言】 指针基础与定义
c语言·开发语言·算法
啊阿狸不会拉杆36 分钟前
《机器学习导论》第 5 章-多元方法
人工智能·python·算法·机器学习·numpy·matplotlib·多元方法
R1nG8631 小时前
CANN资源泄漏检测工具源码深度解读 实战设备内存泄漏排查
数据库·算法·cann
_OP_CHEN2 小时前
【算法基础篇】(五十六)容斥原理指南:从集合计数到算法实战,解决组合数学的 “重叠难题”!
算法·蓝桥杯·c/c++·组合数学·容斥原理·算法竞赛·acm/icpc
TracyCoder1232 小时前
LeetCode Hot100(27/100)——94. 二叉树的中序遍历
算法·leetcode
九.九2 小时前
CANN HCOMM 底层机制深度解析:集合通信算法实现、RoCE 网络协议栈优化与多级同步原语
网络·网络协议·算法