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)

相关推荐
youngerwang4 分钟前
【从搬运工到协处理器:网卡芯片架构、算法、验证与边缘演进深度剖析】
网络·算法·架构·芯片
想要成为糕糕手15 分钟前
前端必修课:JavaScript 数组与数据结构底层逻辑全解析
javascript·数据结构·面试
KaMeidebaby28 分钟前
卡梅德生物技术快报|纯化重组蛋白实操详解
人工智能·python·tcp/ip·算法·机器学习
手写码匠1 小时前
从零实现 Prompt 工程引擎:结构化提示、自动优化与多轮自省体系
人工智能·深度学习·算法·aigc
无限码力2 小时前
阿里算法岗 0530笔试真题 - 多约束条件下的元素匹配统计
算法·阿里笔试真题·阿里机试真题·阿里算法岗笔试
lqqjuly2 小时前
MLA — 多头潜在注意力深度解析
深度学习·神经网络·算法
吴可可1232 小时前
SolidWorks草图转三维DWG技巧
算法
tyung2 小时前
Go 手写 Wait-Free SPSC 无界队列:无 CAS、无锁、泛型节点池
数据结构·后端·go
redaijufeng3 小时前
C++雾中风景7:闭包
c++·算法·风景
Chen_harmony3 小时前
一、数据结构概念和复杂度计算
数据结构