解题思路:这道题和第84题柱状图中的最大矩形思路是是一样,而且更加简单,这里主需要找到左边第一个更大的元素下标就可以了,84题需要找到左右两边第一个更小的元素下标,因此这道题也可以用两种思路求解:
方法一:从右向左,利用右边已知的信息进行路径压缩
class Solution:
def dailyTemperatures(self, T: List[int]) -> List[int]:
size = len(T)
res = [0] * size
for i in range(size-2, -1, -1):
tmp = i + 1
while(T[tmp] <= T[i] and res[tmp]):
tmp += res[tmp]
if T[tmp] > T[i]:
res[i] = tmp - i
else: res[i] = 0
return res
方法二:利用栈,栈中维护一个递减数组的索引,可以快速找到离当前最近且比当前温度高的下标
class Solution:
def dailyTemperatures(self, T: List[int]) -> List[int]:
size = len(T)
res = [0] * size
s = []
for i in range(size-1, -1, -1):
while(s and T[s[-1]] <= T[i]):
s.pop()
if s: res[i] = s[-1] - i
s.append(i)
return res