Given a list of daily temperatures T, return a list such that, for each day in the input, tells you how many days you would have to wait until a warmer temperature. If there is no future day for which this is possible, put 0 instead.
For example, given the list of temperatures T = [73, 74, 75, 71, 69, 72, 76, 73], your output should be [1, 1, 4, 2, 1, 1, 0, 0].
Note: The length of temperatures will be in the range [1, 30000]. Each temperature will be an integer in the range [30, 100].
Solution in python:
1.Brute force
class Solution:
def dailyTemperatures(self, T: List[int]) -> List[int]:
length = len(T)
flag = [None for i in range(length)]
for i in range(length):
j = i
while T[i] >= T[j]:
j += 1
if j == length:
flag[i] = 0
break
if j < length:
flag[i] = j-i
return flag
Complexity analysis:
- Time complexity:
O(N^2)
- Space complexity:
O(N)
2.Stack
class Solution:
def dailyTemperatures(self, T: List[int]) -> List[int]:
length = len(T)
stack = []
flag = [0 for i in range(length)]
i = 0
while i < length:
if len(stack) == 0 or T[i] <= T[stack[-1]]:
stack.append(i)
i += 1
elif T[i] > T[stack[-1]] :
index = stack.pop()
flag[index] = i - index
return flag
Complexity analysis:
- Time complexity:
O(N)
- Space complexity:
O(M)
留言