今天继续刷leetcode,第55题,跳跃游戏,判断是否能跳跃到数组最后一位。
分析:
方法一:设置一个临时变量,指定当前能跳跃的最大步长(每后移一位,步长减一)。如果步长小于或者等于0,那么就返回false,如果到达最后一位,就返回true。
方法二:求下标与当前的跳跃的和的最大,判断跳跃到第n个位置到时候,n与和到大小,如果n大于和,那么就证明跳跃不到第n
个位置,如果小,就能。
问题:
1、注意逻辑问题,先判断是否可以往后跳跃,然后再跳跃,最后再比较大小(调整最大步长)
附上c++代码:
class Solution {
public:
bool canJump(vector<int>& nums) {
int n=nums.size();
if(n==1)
return true;
int temp=nums[0];
for(int i=1;i<n;i++)
{
if(temp<=0)
return false;
temp-=1;
if(nums[i]>temp)
temp=nums[i];
}
return true;
}
};
附上python代码:
class Solution:
def canJump(self, nums: List[int]) -> bool:
max_right = 0
for i, num in enumerate(nums):
if i > max_right:
return False
else:
max_right = max(max_right, i + num)
return True