当前位置:网站首页>头脑风暴:打家劫舍2
头脑风暴:打家劫舍2
2022-08-08 20:22:00 【InfoQ】
题目
输入:nums = [2,3,2]
输出:3
解释:你不能先偷窃 1 号房屋(金额 = 2),然后偷窃 3 号房屋(金额 = 2), 因为他们是相邻的。
输入:nums = [1,2,3,1]
输出:4
解释:你可以先偷窃 1 号房屋(金额 = 1),然后偷窃 3 号房屋(金额 = 3)。
偷窃到的最高金额 = 1 + 3 = 4 。
输入:nums = [1,2,3]
输出:3
解题思路
代码实现
class Solution {
public int rob(int[] nums) {
if(nums.length == 0) return 0;
if(nums.length == 1) return nums[0];
// 包含首元素,不包含尾元素
int value1 = RobRange(nums, 0, nums.length-2);
// 包含尾元素,不包含首元素
int value2 = RobRange(nums, 1, nums.length-1);
return Math.max(value1, value2);
}
public int RobRange(int[] nums, int start, int end){
if(start == end) return nums[start];
int[] dp = new int[nums.length];
dp[start] = nums[start];
dp[start + 1] = Math.max(nums[start], nums[start+1]);
for(int i = start + 2; i <= end; i++){
dp[i] = Math.max(dp[i-2]+nums[i], dp[i - 1]);
}
return dp[end];
}
}
最后
- 时间复杂度:O(n),其中 n 是数组长度。
- 空间复杂度:O(1)。
边栏推荐
猜你喜欢
培训预告 | 企业应用现代化实用教程——DevOps方法论及最佳实践篇 8月11日上线
信号与系统【x(t)*h(t)=y(t) 求h(t)】附matlab代码
C语言初阶-指针
文档管理系统对于企业来说有哪些作用?
数据解读!智能座舱“升级战”背后,本土供应链加速崛起
西湖大学鞠峰组招聘【塑料降解 / 污水工程 / 微生物学】方向博士后和科研助理...
接口测试经典面试题:Session、cookie、token有什么区别?
JSP第二篇 -----JSP浅聊EL表达式第二篇:EL表达式中的运算符
莫让“学院派”限制我们的思维:在数组的中间位置删除数据一定比链表慢?
Superman is coming!Flutter realizes full-screen power animation!
随机推荐
wps表格怎么复制粘贴后与原来格式一样?
书法家唐效奇
正则表达式的限定符、或运算符、字符类、元字符、贪婪/懒惰匹配
信号与系统【x(t)*h(t)=y(t) 求h(t)】附matlab代码
工程 (六) ——PointNet点云分类
第四讲 SVN
文档管理系统对于企业来说有哪些作用?
分布式链路追踪Jaeger + 微服务Pig在Rainbond上的实践分享
Word清除格式在哪里?Word清除格式使用方法
Matlab用回归、SEIRD模型、聚类预测美国总统大选、新冠疫情对中美经济的影响
微信小程序第一集
idea 引入包报错:Unable to provision, see the following errors
OpenEuler's Ways to Improve Resource Utilization 02: Effects under Typical Applications
技术分享活动
Mendix:企业成功执行数字化转型的9个因素
NAACL2022 NER SOTA - RICON study notes
【无标题】
黑猫带你学Makefile第4篇:Makefile中变量的使用
推荐系统如何可信?罗格斯大学最新《可信推荐系统》综述,43页pdf阐述可信RS组成与技术
测试面试题锦集