題目:
給你一個非負整數數組 nums ,你最初位于數組的 第一個下標 。數組中的每個元素代表你在該位置可以跳躍的最大長度。
判斷你是否能夠到達最后一個下標,如果可以,返回 true ;否則,返回 false 。
貪心算法:
思路:
盡可能到達最遠位置(貪心)。
如果能到達某個位置,那一定能到達它前面的所有位置。
C++:
class Solution
{
public:bool canJump(vector<int>& nums){int n = nums.size();int r = 0; // 當前能跳到的最遠位置for (int l = 0;l < n;l++){if(l > r) // 若跳不到l,則一定跳不到 n-1,即:若中間有任一點跳不到,則一定跳不到最后{return false;}r = max(r, l+nums[l]); // 更新當前最遠位置}return true;}
};
python:
思路同上
# enumerate(iteration, start)# 函數默認包含兩個參數,其中iteration參數為需要遍歷的參數,比如字典、列表、元組等,start參數為開始的參數,默認為0(不寫start那就是從0開始)。# enumerate函數有兩個返回值,第一個返回值為從start參數開始的數,第二個參數為iteration參數中的值。class Solution:def canJump(self,nums):max_i = 0 # 初始化當前能到達最遠的位置# i為當前位置,jump是當前位置的跳數for i, jump in enumerate(nums):# 如果當前位置能到達,并且當前位置+跳數>最遠位置if max_i >= i and i+jump > max_i:# 更新最遠能到達位置max_i = i+jump# 比較最遠位置和數組長度return max_i >= i