当前位置:网站首页>【刷题篇】打家劫舍
【刷题篇】打家劫舍
2022-08-02 00:46:00 【m0_60631323】
一、题目
OJ链接
你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都 围成一圈 ,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警 。
给定一个代表每个房屋存放金额的非负整数数组,计算你 在不触动警报装置的情况下 ,今晚能够偷窃到的最高金额。
示例:
输入:nums = [2,3,2]
输出:3
解释:你不能先偷窃 1 号房屋(金额 = 2),然后偷窃 3 号房屋(金额 = 2), 因为他们是相邻的。
二、题解
2.1动态规划
本质上求的是在不能取相邻数的情况下的子序列的最大累加和
但本题还有一个特殊限制:
就是数组中的第一个数和最后一个数是算相邻的,也就是说我们不能同时选择第一个数和最后一个数,那么我们可以这样做,分两种情况
1)从0~n-2上做选择
2)从1~n-1上做选择
返回两种情况的较大值
源码:
️
public int rob (int[] nums) {
if(nums.length==1) {
return nums[0];
}
if(nums.length==2) {
return Math.max(nums[0],nums[1]);
}
int N=nums.length;
int[] dp1=new int[N];
dp1[0]=nums[0];
dp1[1]=Math.max(nums[0],nums[1]);
for(int i = 2; i <N-1; i++){
int p1=dp1[i-1];
int p2=dp1[i-2]+nums[i];
dp1[i]=Math.max(p1,p2);
}
int[] dp2=new int[N];
dp2[1]=nums[1];
dp2[2]=nums[2];
for (int i = 3; i <N ; i++) {
int p1=dp2[i-1];
int p2=dp2[i-2]+nums[i];
dp2[i]=Math.max(p1,p2);
}
return Math.max(dp1[N-2],dp2[N-1]);
}
这个代码还是可以继续优化的,因为dp[i]只依赖dp[i-1]和dp[i-2],所以我们就可用几个变量滚动的方式代替dp数组
优化后:
️
public int rob(int[] nums) {
if (nums.length == 1) {
return nums[0];
}
if (nums.length == 2) {
return Math.max(nums[0], nums[1]);
}
int N= nums.length;
int pre1=nums[0];
int pre2=Math.max(nums[0],nums[1]);
for (int i = 2; i < N-1; i++) {
int tmp=Math.max(pre1+nums[i],pre2);
pre1=pre2;
pre2=tmp;
}
int ans1=pre2;
pre1=nums[1];
pre2=Math.max(nums[1],nums[2]);
for (int i = 3; i < N; i++) {
int tmp=Math.max(pre1+nums[i],pre2);
pre1=pre2;
pre2=tmp;
}
int ans2=pre2;
return Math.max(ans1,ans2);
}
边栏推荐
猜你喜欢
大话西游创建角色失败解决
Kubernetes — 核心资源对象 — 存储
CVPR 2022 | SharpContour:一种基于轮廓变形 实现高效准确实例分割的边缘细化方法
MLX90640 红外热成像仪测温模块开发笔记(完整版)
百度、百图生科 | HelixFold-Single: 使用蛋白质语言模型作为替代进行无MSA蛋白质结构预测
Pytorch seq2seq model architecture to achieve English translation tasks
Reflex WMS中阶系列6:对一个装货重复run pick会有什么后果?
input禁止输入
IDEA如何运行web程序
Can‘t connect to MySQL server on ‘localhost3306‘ (10061) 简洁明了的解决方法
随机推荐
ERROR 1064 (42000) You have an error in your SQL syntax; check the manual that corresponds to your
Two ways to pass feign exceptions: fallbackfactory and global processing Get server-side custom exceptions
第 45 届ICPC亚洲区域赛(上海)G-Fibonacci
理解分布式系统中的缓存架构(下)
Kubernetes — 核心资源对象 — 网络
flex布局中使用flex-wrap实现换行
傅立叶变换相关公式
喜报 | AR 开启纺织产业新模式,ALVA Systems 再获殊荣!
好的期货公司开户让人省心省钱
flowable工作流所有业务概念
大话西游创建角色失败解决
网络请求技术--跨域
传统企业数字化转型需要经过几个阶段?
DOA从一维阵列传感说起
Kubernetes — Flannel
期货开户手续费加一分是主流
IDEA版Postman插件Restful Fast Request,细节到位,功能好用
go笔记之——goroutine
Don't concatenate strings with jOOQ
Pytorch seq2seq model architecture to achieve English translation tasks