『LeetCode|每日一题』---->打家劫舍||

本文介绍了LeetCode上的「打家劫舍II」问题的解题思路和核心代码。作者通过将首尾房间分开考虑,使用动态规划的方法求解,避免同时盗窃相邻房间。代码中展示了动态规划数组的实现,并给出了运行结果。文章还分享了降低期待值的生活哲学,并推荐了LeetCode作为算法练习平台。
摘要由CSDN通过智能技术生成

目录

1.每日一句

2.作者简介

『LeetCode|每日一题』打家劫舍||

1.每日一题

2.解题思路

        2.1 思路分析

        2.2 核心代码

        2.3 完整代码

        2.4 运行结果 


1.每日一句

任何事情把期待值降到最低,所有遇见的都是礼物

2.作者简介

🏡个人主页:XiaoXiaoChen-2716 

📚学习专栏:力扣专栏

🕒发布日期:2022/11/27

 

LeetCode|每日一题』打家劫舍||

1.每日一题

原文链接--->点我

2.解题思路

        2.1 思路分析

这个题目和打家劫舍|的区别就是第一间和最后一间也是相邻的,不能都偷窃这两个房间

        S1:首先分析,第一间和最后一间我们要是能把它们分开就好了,于是想到了把第一间到倒数第二间作为一个数组,第二间到最后一间作为一个数组,这样就成功的把它们两间房间分开了;

        S2:那么接下来就和打家劫舍|的思路一样,从第三间房间开始,要么偷当前房间和隔了一间的房间,要么就是偷左边相邻的那个房间的,取其中的最大值即可;

详细的思路可以看打家劫舍|:打家劫舍|详解

        2.2 核心代码

    private int dp(int[] nums){
        int l = nums.length;
        int[] dt = new int[l];
        dt[0] = nums[0];
        dt[1] = Math.max(nums[0] , nums[1]);
        int res = 0;
        for(int i = 2 ; i < l ; i++){
            dt[i] = Math.max(dt[i - 1] , dt[i - 2] + nums[i]);
        }
        return dt[l - 1];
    }

        2.3 完整代码

class Solution {
    public int rob(int[] nums) {
        int len = nums.length;
        if(len == 0) return 0;
        if(len == 1) return nums[0];
        if(len == 2) return Math.max(nums[0] , nums[1]);
        int res = 0;
        res = Math.max(dp(Arrays.copyOfRange(nums , 0 , len - 1)) , dp(Arrays.copyOfRange(nums , 1 , len)));
        return res;
    }
    private int dp(int[] nums){
        int l = nums.length;
        int[] dt = new int[l];
        dt[0] = nums[0];
        dt[1] = Math.max(nums[0] , nums[1]);
        int res = 0;
        for(int i = 2 ; i < l ; i++){
            dt[i] = Math.max(dt[i - 1] , dt[i - 2] + nums[i]);
        }
        return dt[l - 1];
    }
}

        2.4 运行结果


🍁 类似题目推荐: 

1.数据结构基础

2.算法专项练习

3.剑指offer专项练习

4.推荐一个学习网站:LeetCode,算法的提升在于日积月累,只有每天练习才能保持良好的状态

如果文章对各位大佬有帮助就支持一下噢,新手尝试,不好的地方请各位大佬多多指教!  

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值