File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 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+ '''
You can’t perform that action at this time.
0 commit comments