leetcode 739.Daily Temperature s

1491 ワード

(土地を)毎日穴を掘って,穴を埋める。
元のリンク:739.Daily Temperature s
関連内容:hashtable、stack
【考え方】現在の要素の一番目の位置を求めるといいです。暴力の方法は列挙を使うことができて、当面の元素とその後の元素は一つ一つ比較します。現在の要素より大きい値が見つかったら、下付きの差分値を計算します。
[java]
class Solution {
    public int[] dailyTemperatures(int[] temperatures) {
        Stack stack = new Stack<>();
        int[] ret =new int[temperatures.length];
        for(int i = 0 ; itemperatures[stack.peek()]){
                int idx = stack.pop();
                ret[idx] = i -idx;
            }
            stack.push(i);
            
        }
        return ret;
    }
}
[python]
class Solution:
    def dailyTemperatures(self, temperatures):
        if not temperatures: return []
        result, stack = [0] * len(temperatures), []
        stack.append((temperatures[0], 0))
        
        for i in range(1, len(temperatures)):
            while stack:
                prev = stack[-1]
                if prev[0] < temperatures[i]:
                    result[prev[1]] = i - prev[1]
                    stack.pop()
                else:
                    break
            stack.append((temperatures[i], i))
            print(stack)
        return result
stack.peek() とstack.pop() の違い 
同じ点:スタックの一番上の値を返します。
異なる点:peekはスタックの値を変えない(スタックトップの値を削除しない)、popはスタックトップの値を削除します。[参照]https://leetcode.com/problems/daily-temperatures/discuss/