leetcode55 Jump Game

 1 """
 2 Given an array of non-negative integers, you are initially positioned at the first index of the array.
 3 Each element in the array represents your maximum jump length at that position.
 4 Determine if you are able to reach the last index.
 5 Example 1:
 6 Input: [2,3,1,1,4]
 7 Output: true
 8 Explanation: Jump 1 step from index 0 to 1, then 3 steps to the last index.
 9 Example 2:
10 Input: [3,2,1,0,4]
11 Output: false
12 Explanation: You will always arrive at index 3 no matter what. Its maximum
13              jump length is 0, which makes it impossible to reach the last index.
14 """
15 """
16 自己AC。用一个dp数组来保存能否到达该位置
17 """
18 class Solution1:
19     def canJump(self, nums):
20         dp = [False]*len(nums)
21         dp[0] = True
22         temp2 = 0
23         for i in range(len(nums)-1):
24             if dp[i] == True:
25                 temp1 = max(i+1, temp2) #如果这里写成temp1=i+1会超时,重复赋值了
26                 temp2 = min(i+nums[i], len(nums)-1)
27                 while temp1 <= temp2:
28                     dp[temp1] = True
29                     temp1 += 1
30         return dp[-1]
31 """
32 解法二:从后向前遍历 O(n)解法
33 """
34 class Solution2:
35     def canJump(self, nums):
36         last = len(nums)-1
37         i = last - 1
38         while i >= 0:
39             if(nums[i] + i) >= last:
40                 last = i
41             i -= 1
42         return last <= 0
43 
44 if __name__ == '__main__':
45     ans = Solution2()
46     nums = [2, 3, 1, 1, 4]
47     print(ans.canJump(nums))

 

posted @ 2020-03-13 22:32  yawenw  阅读(137)  评论(0编辑  收藏  举报