文章目录
- 前言
- LeetCode、198. 打家劫舍【中等,一维线性DP】
- 题目及分类
- 思路
- 线性DP(一维)
- 资料获取
前言
博主介绍:✌目前全网粉丝2W+,csdn博客专家、Java领域优质创作者,博客之星、阿里云平台优质作者、专注于Java后端技术领域。
涵盖技术内容:Java后端、算法、分布式微服务、中间件、前端、运维、ROS等。
博主所有博客文件目录索引:博客目录索引(持续更新)
视频平台:b站-Coder长路
LeetCode、198. 打家劫舍【中等,一维线性DP】
题目及分类
题目链接:LeetCode、198. 打家劫舍
分类:动态规划/线性DP
思路
线性DP(一维)
思路说明:
首先抓住条件:①无法同时偷连续的两所房子。②每个房屋钱财非负。③找到最贵的一种打劫方案求得最高金额。
采用线性DP,假设dp(i)就是抢夺金额最高的一种方案总金额,即可列出一条递推方程:
dp(i) = Math.max(dp[i - 1], dp[i - 2] + (i < n ? nums[i] : 0))
,无非是第i-1的最高金额与i-2偷得到的+当前屋子偷得到的金额取一个最大值即可。
复杂度分析:时间复杂度O(n),空间复杂度O(n)
class Solution {//dp(i) = Math.max(dp(i-1), dp(i - 2) + nums(i))public int rob(int[] nums) {int n = nums.length;if (n == 1) return nums[0];int[] dp = new int[n + 1];dp[0] = nums[0];dp[1] = Math.max(nums[0], nums[1]);for (int i = 2; i <= n; i ++) {dp[i] = Math.max(dp[i - 1], dp[i - 2] + (i < n ? nums[i] : 0));}return dp[n];}
}
资料获取
大家点赞、收藏、关注、评论啦~
精彩专栏推荐订阅:在下方专栏👇🏻
- 长路-文章目录汇总(算法、后端Java、前端、运维技术导航):博主所有博客导航索引汇总
- 开源项目Studio-Vue—校园工作室管理系统(含前后台,SpringBoot+Vue):博主个人独立项目,包含详细部署上线视频,已开源
- 学习与生活-专栏:可以了解博主的学习历程
- 算法专栏:算法收录
更多博客与资料可查看👇🏻获取联系方式👇🏻,🍅文末获取开发资源及更多资源博客获取🍅