Skip to content

Commit dc0827d

Browse files
committed
跳跃游戏 II
1 parent 86a35ff commit dc0827d

1 file changed

Lines changed: 36 additions & 0 deletions

File tree

jump_game_ii.py

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
# -*- coding: utf-8 -*-
2+
3+
class Solution:
4+
# @param A, a list of integers
5+
# @return an integer
6+
def jump(self, A):
7+
# write your code here
8+
'''
9+
这题比想象的要难,Google之后才找到一个纯线性的解法。先想明白下面2点:
10+
1. 从0出发,只需要1步就能覆盖A[1]到A[A[0]],不可能更少
11+
2. 那么1 <= i <= A[0]能到达的最远点i + A[i]的步数不可能多余2步。
12+
'''
13+
if len(A) >= 2:
14+
i, steps = 1, 1
15+
curr_range = A[0] # 当前步数覆盖的最远距离
16+
next_range = A[0] # curr_range内下一步能到达的最远距离
17+
while i <= min(len(A), curr_range):
18+
next_range = max(next_range, A[i] + i)
19+
if i == len(A) - 1:
20+
return steps
21+
if i == curr_range: # 到curr_range后面的点必需加1步
22+
curr_range = next_range
23+
steps += 1
24+
i += 1
25+
return 0
26+
27+
'''
28+
最直观的动态规划算法,大数据会超时。
29+
ret = [2147483647] * len(A)
30+
ret[0] = 0
31+
for i in xrange(len(A)):
32+
for j in xrange(A[i]):
33+
if (i + (j + 1)) < len(A):
34+
ret[i + j + 1] = min(ret[j], ret[i] + 1)
35+
return ret[-1]
36+
'''

0 commit comments

Comments
 (0)