在本題中,我們是通過單調棧來解決的,因為我們采用了棧的數據結構,并且,棧內存儲的元素是單調的。
本題我們考慮,將氣溫數組元素的下標存入棧中,首先初始化要把0放入,0是下標的意思。然后我們拿下標為1的元素也就是74和下標為0的元素比較,74>73,所以我們計算完二者的距離(下標的差值),然后把結果存到一個數組中。然后將下標0彈出棧,因為這個點的距離已經獲取了,然后再將下標1壓入棧中。
如果遇到當前元素沒有棧中的下標對應的元素大,直接將該下標壓入棧中,繼續往后比較。
class Solution {// 版本 1public int[] dailyTemperatures(int[] temperatures) {int lens=temperatures.length;int []res=new int[lens];/**如果當前遍歷的元素 大于棧頂元素,表示 棧頂元素的 右邊的最大的元素就是 當前遍歷的元素,所以彈出 棧頂元素,并記錄如果棧不空的話,還要考慮新的棧頂與當前元素的大小關系否則的話,可以直接入棧。注意,單調棧里 加入的元素是 下標。*/Deque<Integer> stack=new LinkedList<>();stack.push(0);for(int i=1;i<lens;i++){if(temperatures[i]<=temperatures[stack.peek()]){stack.push(i);}else{while(!stack.isEmpty()&&temperatures[i]>temperatures[stack.peek()]){res[stack.peek()]=i-stack.peek();stack.pop();}stack.push(i);}}return res;}
注意:stack中