1. 題目描述
2. 題目解析
- 大致的意思是:在今天的以後幾天內,有哪一天是比今天的氣溫升高的,如果有的話,求出其中的天數差,如果沒有的話,用0代替。
- 一開始用的暴力,然後超時。
- 這個題目用到了單調棧的原理。
3. 題目代碼
public static int[] dailyTemperatures(int[] T) {
int[] list = new int[T.length];
int num = 0;
Stack<Integer> stack = new Stack<>();
for (int i = 0; i < list.length; i++) {
// 字符串長度爲 0,返回 true,否則返回 false。
// Object push(Object element):將元素推送到堆棧頂部。
// Object pop():移除並返回堆棧的頂部元素。如果我們在調用堆棧爲空時調用pop(),則拋出’EmptyStackException’異常。
// Object peek():返回堆棧頂部的元素,但不刪除它。
// boolean empty():如果堆棧頂部沒有任何內容,則返回true。否則,返回false。
// int search(Object element):確定對象是否存在於堆棧中。如果找到該元素,它將從堆棧頂部返回元素的位置。否則,它返回-1。
while (!stack.isEmpty() && T[i] > T[stack.peek()]) {
list[stack.peek()] = i - stack.peek();
stack.pop();
}
stack.add(i);
}
return list;
}