leetcode 739.Daily Temperature s
1491 ワード
(土地を)毎日穴を掘って,穴を埋める。
元のリンク:739.Daily Temperature s
関連内容:hashtable、stack
【考え方】現在の要素の一番目の位置を求めるといいです。暴力の方法は列挙を使うことができて、当面の元素とその後の元素は一つ一つ比較します。現在の要素より大きい値が見つかったら、下付きの差分値を計算します。
[java]
同じ点:スタックの一番上の値を返します。
異なる点:peekはスタックの値を変えない(スタックトップの値を削除しない)、popはスタックトップの値を削除します。[参照]https://leetcode.com/problems/daily-temperatures/discuss/
元のリンク: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/