739. Daily Temperatures

Medium


Given an array of integers temperatures represents the daily temperatures, return an array answer such that answer[i] is the number of days you have to wait after the ith day to get a warmer temperature. If there is no future day for which this is possible, keep answer[i] == 0 instead.

 

Example 1:

Input: temperatures = [73,74,75,71,69,72,76,73]
Output: [1,1,4,2,1,1,0,0]

Example 2:

Input: temperatures = [30,40,50,60]
Output: [1,1,1,0]

Example 3:

Input: temperatures = [30,60,90]
Output: [1,1,0]

 

Constraints:

  • 1 <= temperatures.length <= 105
  • 30 <= temperatures[i] <= 100




 class Solution:
    def dailyTemperatures(self, temperatures: List[int]) -> List[int]:
#         self.stack = []
#         n = len(temperatures)
#         self.ans = [0]*n

#         for index, temp in enumerate(temperatures):

#             while self.stack and temperatures[self.stack[-1]] < temp:
#                 pop_index = self.stack.pop()
#                 self.ans[pop_index] = index-pop_index
#             self.stack.append(index)

#         return self.ans
        n = len(temperatures)
        ans = [0] * n
        hottest = 0
        for index in range(n-1, -1, -1):
            current_temp = temperatures[index]
            if current_temp >= hottest:
                hottest = temperatures[index]
                continue


            day = 1
            while temperatures[day+index] <= current_temp:
                day += ans[day+index]

            ans[index] = day
        return ans

Random Note


From python 3.7 dict guarantees that order will be kept as they inserted, and popitem will use LIFO order but we need FIFO type system. so we need OrderedDict which have popIten(last = T/F) for this req. One thing, next(iter(dict)) will return the first key of the dict