20200406——第七百三十九題 每日溫度

這道題也就是看後面多少天之後,會超過當前的這個溫度。

class Solution {
    public int[] dailyTemperatures(int[] T) {
        int[] temperature = new int[T.length];
        for(int i = 0 ;i<T.length;++i){
           int temp = T[i];
           if(temp < 100){
               for(int j = i+1;j<T.length;++j){
                   if(T[j] > temp){
                   temperature[i] = j-i;
                   break;
                   }
               }
           }
        }
        return temperature;
    }
}

在這裏插入圖片描述

時間複雜度和空間都挺高的,這種暴力破解法。

用棧

class Solution {
    public int[] dailyTemperatures(int[] T) {
        //首先創建一個棧
        Stack<Integer> stack = new Stack<>();
        //在創建一個返回的數組
        int[] result = new int[T.length];
        //有一個for循環
        for(int i = 0;i<T.length;++i){
            while(!stack.isEmpty() &&  T[i]>T[stack.peek()]){
                int pre = stack.pop();
                result[pre] = i-pre; 
            }
            stack.push(i);
        }
        return result;

    }
}

從頭到尾遍歷元素,如果棧爲空就直接入棧,如果當前的節點(也就是索引)在給出的數組中的值,小於上一個節點索引對應在數組的值,就直接入棧。什麼時候出棧呢?噹噹前的節點大於上一個節點索引對應的值,那麼就出棧。因爲記錄的是索引。所以返回的新的數組的值,就是剛進入入彈出的節點的索引的差。

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章