码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 力扣labuladong一刷day11拿下打家劫舍问题共3题


    力扣labuladong一刷day11拿下打家劫舍问题共3题

    文章目录

        • 力扣labuladong一刷day11拿下打家劫舍问题共3题
        • 一、198. 打家劫舍
        • 二、213. 打家劫舍 II
        • 三、337. 打家劫舍 III

    一、198. 打家劫舍

    题目链接:https://leetcode.cn/problems/house-robber/
    思路:打劫必须隔1家,定义dp[i]表示截止到第i家,所能抢到的最大值。
    递推公式 dp[i] = max(dp[i-1], dp[i-2]+nums[i]);
    如果当前这家不偷,最大值就是dp[i-1],如果偷就是要隔一家dp[i-2]+nums[i]

    class Solution {
       public int rob(int[] nums) {
            if (nums.length == 1) return nums[0];
            int[] dp = new int[nums.length];
            dp[0] = nums[0];
            dp[1] = Math.max(nums[0], nums[1]);
            for (int i = 2; i < nums.length; i++) {
                dp[i] = Math.max(dp[i-1], dp[i-2]+nums[i]);
            }
            return dp[nums.length-1];
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    由于只用到了前一天和前两天,所以还可以优化一下空间。

    public int rob(int[] nums) {
            if (nums.length == 1) return nums[0];
    
            int a = nums[0], b= Math.max(nums[0], nums[1]);
            for (int i = 2; i < nums.length; i++) {
                int c = Math.max(b, a+nums[i]);
                a = b;
                b = c;
            }
            return b;
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    二、213. 打家劫舍 II

    题目链接:https://leetcode.cn/problems/house-robber-ii/
    思路:直接划分为两个区间然后分别计算再比较。即nums[0, len-2] 和 nums[1, len-1]

    class Solution {
        public int rob(int[] nums) {
            if (nums.length == 1) return nums[0];
            if (nums.length == 2) return Math.max(nums[0], nums[1]);
            int max = 0, a = nums[0], b = Math.max(nums[0], nums[1]);
            for (int i = 2; i < nums.length - 1; i++) {
                int c = Math.max(b, a+nums[i]);
                a = b;
                b = c;
            }
            max = b;
            a = nums[1];
            b = Math.max(nums[1], nums[2]);
            for (int i = 3; i < nums.length; i++) {
                int c = Math.max(b, a+nums[i]);
                a = b;
                b = c;
            }
            return max > b ? max : b;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    三、337. 打家劫舍 III

    题目链接:https://leetcode.cn/problems/house-robber-iii/
    思路:定义nums[2] 记录每个节点偷与不偷的状态。

    class Solution {
       public int rob(TreeNode root) {
            int[] ints = f1(root);
            return Math.max(ints[0], ints[1]);
        }
    
        int[] f1(TreeNode root) {
            int[] nums = new int[2];
            if (root == null) {
                return nums;
            }
            int[] left = f1(root.left);
            int[] right = f1(root.right);
            
            nums[0] = Math.max(left[0], left[1]) + Math.max(right[0], right[1]);
            nums[1] = root.val + left[0] + right[0];
            return nums;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
  • 相关阅读:
    网络安全(黑客)自学
    Leetcode刷题详解——打家劫舍 II
    提供话费充值接口 话费快充慢充/API独立接口,商城/小程序/公众号合作
    第十章《日期与时间》第9节:日期时间对象的转换
    【Java】基础练习 --- Stream练习
    excel高级绘图技巧100讲(二十一)- Excel层叠柱形图
    Python-Behave:如果environment.py没有被执行
    数据可视化图表总结(一)
    7月底截止截止!汉阳区2022年度总部企业申报条件、原则和材料
    单片机第三季-第二课:STM32存储器、电源和时钟体系
  • 原文地址:https://blog.csdn.net/qq_43511039/article/details/134434853
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号