package leecode;
/**
* 198. 打家劫舍
*
*
*你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,
* 影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,
*如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。
*给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。
*
* @author Tang
* @date 2021/9/16
*/
public class Rob {
/**
* 我是一个bu会动态规划的小偷
* n :房间号n
* f(n) :按顺序 到n号房的可偷最大金额
* f(n) = Max(f(n-2) + V(n), f(n-1))
* base :f(1) = nums[1] ; f(2) = Max(nums[1], nums[2])
*
*
* @param nums
* @return
*/
public int rob(int[] nums) {
if(nums.length == 0) {
return 0;
}
if(nums.length == 1) {
return nums[0];
}
//构建dp tables
int[] tables = new int[nums.length];
for(int i = 0; i < nums.length; i++) {
if(i == 0){
tables[i] = nums[i];
continue;
}
if(i == 1) {
tables[i] = Math.max(nums[0], nums[1]);
continue;
}
tables[i] = Math.max(tables[i - 2] + nums[i], tables[i - 1]);
}
return tables[nums.length - 1];
}
public static void main(String[] args) {
int[] num = {2,7,9,3,1};
System.out.println(new Rob().rob(num));
}
}
Leecode no.198. 打家劫舍
转载本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
leetcode198-打家劫舍
文章目录打家劫舍题目描述code打家劫舍
leetcode198 打家劫舍 动态规划 数组 i++ -
【LeetCode 198】打家劫舍
当前状态依赖于前两天状态的最大值,递推得到最后的结果。
leetcode 算法 取值 List 分类讨论 -
leetcode: 198. 打家劫舍
状态转移方程 dp[i] = max(dp[i - 1], dp[i - 2] + nums[i])class Solution { //
LeetCode leetcode 动态规划 -
【leetcode.198】打家劫舍
一、题目描述你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的
动态规划 边界条件 代码实现 i++