Leetcode 739 - Daily Temperatures

題目

Problem#

給你一個整數陣列 $T[i]$ 要你回答一個整數陣列 $ans$ ,其中 $ans[i]$ 代表對於第 $i$ 天的溫度 $T[i]$ 會存在一個溫度 $T[j]$ 且 $j = i + ans[i]$ 使得 $T[i] < T[j]$

想法#

naive: 對每個數字往後去找第一個比它大的 $O(n^2)$ TLE

維護一個 monotonic stack 代表等待比他大的溫度的列表(可以用 pair<int,int> 一起存 (idx, temp)),接著遍歷 temp[i] 如果大於 stack 頂端的溫度,就代表裏頭的溫度遇到比它大的,所以就計算 ans[i] 接著 pop stack;接著把目前的 idx 和 temp[idx] 堆進 stack 中 (找比它大的溫度距離它多少)

  • 時間複雜度: $\mathcal{O}(n)$
  • 空間複雜度: $\mathcal{O}(n)$

AC Code#

賞析#

https://www.cnblogs.com/grandyang/p/8097513.html
https://oi-wiki.org/ds/monotonous-stack/
https://leetcode.com/problems/daily-temperatures/solutions/1516538/daily-temperatures/?orderBy=hot

心得#

這種我一開始都沒想到要怎麼做= = ,要多寫一點這種題目