标签:false 游戏 nums 55 && 跳跃 return true
55. 跳跃游戏
题目描述
思路分析
f
[
i
]
f[i]
f[i]:能否跳到位置i,能为
t
r
u
e
true
true,不能为
f
a
l
s
e
false
false
朴素方程:
f
[
i
]
f[i]
f[i]=
0
+
n
u
m
s
[
0
]
>
=
i
0+nums[0]>=i
0+nums[0]>=i&&
f
[
0
]
f[0]
f[0] ||
1
+
n
u
m
s
[
1
]
>
=
i
1+nums[1]>=i
1+nums[1]>=i&&
f
[
1
]
f[1]
f[1] ||…||
i
−
1
+
n
u
m
s
[
i
−
1
]
>
=
0
i-1+nums[i-1]>=0
i−1+nums[i−1]>=0&&
f
[
i
−
1
]
f[i-1]
f[i−1]
-> 思考:如何优化?
首先思考得出结论:如果能跳到i,则必然能跳到
i
i
i之前的任何位置。
有了这个结论,就可以做了。假设我们走到了
i
i
i,只需要判断
[
0
,
i
−
1
]
[0,i-1]
[0,i−1]上最大的
n
u
m
s
[
k
]
+
k
nums[k]+k
nums[k]+k是否大于或等于i即可。
代码实现
class Solution {
public:
bool canJump(vector<int>& nums) {
for(int i=0,j=0;i<nums.size();i++){
if(i>j) return false;
j=max(j,i+nums[i]);
}
return true;
}
};
标签:false,游戏,nums,55,&&,跳跃,return,true 来源: https://blog.csdn.net/qq_50757994/article/details/120859514
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。