【leetcode刷題】T172-跳躍遊戲

  • 2019 年 10 月 8 日
  • 筆記

木又連續日更第10天(10/100)

木又的第172篇leetcode解題報告

貪心類型第1篇解題報告

leetcode第55題:跳躍遊戲

https://leetcode-cn.com/problems/jump-game

【題目】

給定一個非負整數數組,你最初位於數組的第一個位置。

數組中的每個元素代表你在該位置可以跳躍的最大長度。

判斷你是否能夠到達最後一個位置。

示例 1:  輸入: [2,3,1,1,4]  輸出: true  解釋: 從位置 0 到 1 跳 1 步, 然後跳 3 步到達最後一個位置。    示例 2:  輸入: [3,2,1,0,4]  輸出: false  解釋: 無論怎樣,你總會到達索引為 3 的位置。但該位置的最大跳躍長度是 0 , 所以你永遠不可能到達最後一個位置。  

【思路】

從一個點i能夠跳到最遠的地方為max_i = i+nums[i],需要保證i < max_i。

最後返回max_i >= len(nums) – 1的布爾值即可。

【程式碼】

python版本

class Solution(object):      def canJump(self, nums):          """          :type nums: List[int]          :rtype: bool          """          max_i = 0          for i, n in enumerate(nums):              if i <= max_i:                  if i + nums[i] > max_i:                      max_i = i + nums[i]              else:                  return False          return max_i >= len(nums)-1  

C++版本

class Solution {  public:      bool canJump(vector<int>& nums) {          int tmp = 0;          for(int i=0; i<nums.size(); i++){              if(i > tmp)                  return false;              tmp = max(tmp, i+nums[i]);          }          return tmp >= nums.size()-1;      }  };