1 class Solution(object):
 2     def dailyTemperatures(self, T: 'List[int]') -> 'List[int]':
 3         S = list()
 4         n = len(T)
 5         SR = [0] * n
 6         nexD = 0
 7         for i in range(n):
 8             t = T[i]
 9             if len(S)==0:
10                 S.append(t)
11             else:
12                 n2 = len(S)
13                 for j in range(n2-1,-1,-1):
14                     preT = S[j]
15                     nexD += 1
16                     if preT < t:
17                         if SR[j] == 0:
18                             SR[j] = nexD
19                     else:
20                         break
21                     
22                 nexD = 0
23                 S.append(t)
24         return SR

补充另一种写法,效率更高:

 1 class Solution:
 2     def dailyTemperatures(self, T: 'List[int]') -> 'List[int]':
 3         res = [0] * len(T)
 4         for i in range(len(T)-2, -1, -1):
 5             n = i + 1
 6             while T[i] >= T[n]:
 7                 if res[n] == 0:
 8                     break
 9                 n += res[n]
10             else:
11                 res[i] = n - i
12         return res

 

自己重新写了一个:

 1 class Solution(object):
 2     def dailyTemperatures(self, T: 'List[int]') -> 'List[int]':
 3         n = len(T)
 4         R = [0] * n
 5         for i in range(n-2,-1,-1):
 6             #print(i)
 7             j = i + 1
 8             while j < n:
 9                 if T[i] < T[j]:
10                     R[i] = j - i
11                     break
12                 else:
13                     if R[j] == 0:
14                         break
15                     else:
16                         j += R[j]
17         return R

两层循环处理,下面给出解释:

第一层循环,从后向前,最后一个元素肯定标记为0,因为它是最后一个元素(废话)。

第二层循环,从倒数第二个元素开始判断,记录当前位置为i,其后面的元素为j,

如果j元素比i元素大,那么就对i进行标记,

如果j元素不比i元素大,那么就继续向后找。但是为了提高效率,这里不是将j++,因为已经可以“确定”比j元素大的下一个元素的位置了。

  如果j已经被标记为0,那么说明后面没有比j更大的元素了。j++也就没有意义了,因为不可能找到比i更大的元素,此时直接标记i为0。

  如果j不为0,那么直接比较i和下一个比j大的元素就可以了。中间可以跳过很多循环,从而提高了算法的效率。

posted on 2019-04-22 09:10  Sempron2800+  阅读(207)  评论(0编辑  收藏  举报