Leetcode 198 打家劫舍

题意理解:

你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警

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

这道题目的含义可理解为: 有一组元素nums=1,2,3,1

约束条件时不取相邻的元素,求能获得的最大值

当前状态总是由之前的选择来决定,所以可以考虑动态规划来解决问题。

解题思路:

假设dpi表示有i个元素时,所能获取的最大值。

则i=0时,有dp0=nums0=1

i=1时, 有dp1=max(nums0,nums1)=max(1,2)=2,即两间屋子选一个价值最高的

i=2时, 没有偷i前一个,当前这个可以偷 dpi-2+numsi

偷了前一个,则当前这个不能偷 dpi-1

则有:

dpi=max(dpi-2+numsi,dpi-1) i>=2------递推公式

所以该问题是一个动态规划问题

额外注意:dpi表示考虑i个屋子能偷到的最大值,不一定偷第i个屋子

1.解决

java 复制代码
public int rob(int[] nums) {
        if(nums.length==0) return 0;
        int[] dp=new int[nums.length];
        Arrays.fill(dp,0);
        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];
    }

2.分析

时间复杂度:O(n)

空间复杂度:O(n)

相关推荐
zlinear数据采集卡13 小时前
D223的PWM电机控制:6路独立脉冲+加减速算法深度解析
arm开发·stm32·嵌入式硬件·算法·fpga开发·架构
杨石兴13 小时前
31、玩具MoM:用2x2矩阵串起全套流程
人工智能·算法·矩阵·电磁学
江畔柳前堤13 小时前
Function Calling 与 Tool Calling:从认知到工程的全景深度解析
开发语言·网络·人工智能·深度学习·算法·机器学习·php
Navigator_Z13 小时前
LeetCode //C - 1192. Critical Connections in a Network
c语言·算法·leetcode
zander25814 小时前
LeetCode 739:每日温度——为什么单调栈要持续弹出
开发语言·python·算法
2601_9557598814 小时前
如何降低 Claude API 批量生产返工率
大数据·人工智能·算法
rannn_11114 小时前
【力扣hot100】链表专题下|138、148、23、146
java·算法·leetcode·链表·开发
ly768914 小时前
分布式一致性算法详解:从 2PC、3PC 到 Paxos、Raft、ZAB
分布式·算法
阿维的博客日记14 小时前
保姆级教程-BBPE分词算法
算法·bbpe
不会就选b15 小时前
算法日常・每日刷题--<优先级队列>2
数据结构·算法