LeetCode 55. 跳跃游戏(Jump Game)

题目描述

给定一个非负整数数组,你最初位于数组的第一个位置。

数组中的每个元素代表你在该位置可以跳跃的最大长度。

判断你是否能够到达最后一个位置。

示例 1:

输入: [2,3,1,1,4]
输出: true
解释: 从位置 0 到 1 跳 1 步, 然后跳 3 步到达最后一个位置。

示例 2:

输入: [3,2,1,0,4]
输出: false
解释: 无论怎样,你总会到达索引为 3 的位置。但该位置的最大跳跃长度是 0 , 所以你永远不可能到达最后一个位置。

解题思路

用贪心的思想,从数组第一个数开始遍历,保存一个值far为在当前位置能跳跃的最大长度。具体来说far初值赋为-1,对于每个位置:

  • 判断当前位置跳跃的长度是否大于far,若大于则更新far为当前数字
  • 判断从当前位置跳跃far的长度能否到达最后一个位置,若能就返回true
  • 判断far是否等于0,若为0说明在当前位置一步也无法跳跃,所以停止遍历并返回false
  • 将当前位置能跳跃的最大长度减1,继续判断下个位置能跳跃的最大长度

代码

 1 class Solution {
 2 public:
 3     bool canJump(vector<int>& nums) {
 4         if(nums.empty())
 5             return false;
 6         int size=nums.size();
 7         int far=-1;
 8         for(int i=0;i<size;i++){
 9             if(nums[i]>far)
10                 far=nums[i];
11             if(far>=size-i-1)
12                 return true;
13             if(far==0)
14                 break;
15             far--;
16         }
17         return false;
18     }
19 };

原文地址:https://www.cnblogs.com/wmx24/p/9032719.html

时间: 2024-10-08 19:07:47

LeetCode 55. 跳跃游戏(Jump Game)的相关文章

[leetcode] 55. 跳跃游戏

55. 跳跃游戏 分明就是45. 跳跃游戏 II的缩水版本嘛..??,难度高的版本居然放在了前面,把像我这种有强迫症的必须按照题号刷题的人不放在眼里么... class Solution { public boolean canJump(int[] nums) { return jump(nums) != Integer.MAX_VALUE; } public int jump(int[] nums) { int f[] = new int[nums.length]; if (nums.leng

LeetCode——55. 跳跃游戏

给定一个非负整数数组,你最初位于数组的第一个位置. 数组中的每个元素代表你在该位置可以跳跃的最大长度. 判断你是否能够到达最后一个位置. 示例 1: 输入: [2,3,1,1,4] 输出: true 解释: 我们可以先跳 1 步,从位置 0 到达 位置 1, 然后再从位置 1 跳 3 步到达最后一个位置. 示例 2: 输入: [3,2,1,0,4] 输出: false 解释: 无论怎样,你总会到达索引为 3 的位置.但该位置的最大跳跃长度是 0 , 所以你永远不可能到达最后一个位置. 动态规划

[Leetcode]44.跳跃游戏Ⅰ&amp;&amp;45.跳跃游戏Ⅱ

跳跃游戏链接 给定一个非负整数数组,你最初位于数组的第一个位置. 数组中的每个元素代表你在该位置可以跳跃的最大长度. 判断你是否能够到达最后一个位置. 示例 1: 输入: [2,3,1,1,4] 输出: true 解释: 从位置 0 到 1 跳 1 步, 然后跳 3 步到达最后一个位置. 示例 2: 输入: [3,2,1,0,4] 输出: false 解释: 无论怎样,你总会到达索引为 3 的位置.但该位置的最大跳跃长度是 0 , 所以你永远不可能到达最后一个位置. 思路: 如果只是判断能否跳到

55. 跳跃游戏-LeetCode

心得:这道题开始想的是剪枝和回溯,但是没想到思路,然后看题解 发现动态规划真的简单,从后往前看,遍历倒数第二个元素,如果他能到达 最后,这说明这个点能到达,遍历倒数第三个,如果这个点能到达第二个,那么他一定能 到达最后一个,问题规模逐渐缩小. 1 class Solution { 2 public boolean canJump(int[] nums) { 3 int index=nums.length-1; 4 for(int i=index-1;i>=0;i--) 5 { 6 if(i+nu

LeetCode 5297. 跳跃游戏 III Jump Game III

地址 https://leetcode-cn.com/problems/jump-game-iii/submissions/ 题目描述这里有一个非负整数数组 arr,你最开始位于该数组的起始下标 start 处.当你位于下标 i 处时,你可以跳到 i + arr[i] 或者 i - arr[i]. 请你判断自己是否能够跳到对应元素值为 0 的 任意 下标处. 注意,不管是什么情况下,你都无法跳到数组之外. 示例 1: 输入:arr = [4,2,3,0,3,1,2], start = 5 输出:

LeetCode 45. 跳跃游戏2

给定一个非负整数数组,你最初位于数组的第一个位置. 数组中的每个元素代表你在该位置可以跳跃的最大长度. 你的目标是使用最少的跳跃次数到达数组的最后一个位置. 示例: 输入: [2,3,1,1,4]       输出: 2       解释: 跳到最后一个位置的最小跳跃数是 2.       从下标为 0 跳到下标为 1 的位置,跳 1 步,然后跳 3 步到达数组的最后一个位置.       说明: 假设你总是可以到达数组的最后一个位置. 来源:力扣(LeetCode)      链接:https

【LeetCode】跳跃游戏

给定一组非负整数,初始时处于数组的第一位下标 0 的位置,数组的每个元素代表那个位置可以跳跃的最大长度.判断你是否能够到达数组的最后一位下标. e.g. A = [2, 3, 1, 1, 4],返回 true. A = [3, 2, 1, 0, 4],返回 false. 我的想法是递归 1 bool canJump(vector<int>& nums) { 2 return jump(nums, 0); 3 } 4 5 bool jump(vector<int> &

[Swift]LeetCode55. 跳跃游戏 | Jump Game

Given an array of non-negative integers, you are initially positioned at the first index of the array. Each element in the array represents your maximum jump length at that position. Determine if you are able to reach the last index. Example 1: Input

leetcode——45. 跳跃游戏 II

我真的是超开心了,又做对了!!!!!!而且没走啥弯路!!!!!!! class Solution(object): def jump(self, nums): """ :type nums: List[int] :rtype: int """ if len(nums)<2: return 0 pact=0 i=0 while i<len(nums): if nums[i]>=len(nums)-i-1: pact+=1 retu