给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answer[i] 是指在第 i 天之后,才会有更高的温度。如果气温在这之后都不会升高,请在该位置用 0 来代替。
示例 1:
输入: temperatures = [73,74,75,71,69,72,76,73]
输出: [1,1,4,2,1,1,0,0]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/daily-temperatures
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解题思路:
这个题,最简单的思路就是遍历一遍,代码如下,但是这样的时间复杂度太高,一定是有更简洁的方法来实现。
class Solution:
def dailyTemperatures(self, temperatures: List[int]) -> List[int]:
result = [0 for i in range(len(temperatures))]
for i in range(0,len(temperatures)-1):
for j in range(i+1,len(temperatures)):
if temperatures[j]>temperatures[i]:
result[i]=j-i
break
else:
result[i]=0
return result
这个方法就是单调栈,如果要考虑后面比前面大的问题,就使用单调递增栈,如果考虑后面比前面小的问题就使用单调递减栈
class Solution:
def dailyTemperatures(self, temperatures: List[int]) -> List[int]:
length = len(temperatures)
result = [0]*length
temstack = []
index = 0
for i in range(0,length):
temperature = temperatures[i]
while temstack and temperature>temperatures[temstack[-1]]:
index = temstack.pop()
result[index] = i - index
temstack.append(i)
return result