這道題也就是看後面多少天之後,會超過當前的這個溫度。
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;
}
}
從頭到尾遍歷元素,如果棧爲空就直接入棧,如果當前的節點(也就是索引)在給出的數組中的值,小於上一個節點索引對應在數組的值,就直接入棧。什麼時候出棧呢?噹噹前的節點大於上一個節點索引對應的值,那麼就出棧。因爲記錄的是索引。所以返回的新的數組的值,就是剛進入入彈出的節點的索引的差。