方法一(暴力):
class Solution {
public int[] dailyTemperatures(int[] T) {
// 初始化变量
int[] res = new int[T.length];
for (int i = 0; i < T.length;i++){
int tmp = T[i];
for (int j = i; j < T.length;j++){
if (T[j] > tmp){
res[i] = j - i;
break;
}
}
}
return res;
}
}
方法二(栈解法):
package com.immunize.leetcode.dailyTemperatures;
import java.util.Stack;
/**
*
* 输入:[73, 74, 75, 71, 69, 72, 76, 73]
*
* 输出:[1, 1, 4, 2, 1, 1, 0, 0]
*
* 左边为栈底,右边为栈顶
*
* 【0(73)】
*
* 【 】(74)T[1] > 73T[0],此时先计算出当前 res[peek] = i - peek,再将T[0]出栈,
*
* 【1(74)】 75 > 74 同理,得到res[peek] = 2-1 = 1
*
* 【 2(75) 3(71) 4(69) 】
*
* 【 2(75) 5(72)】6(72) > 69,71,因此依次算出,res[4] = 5-4 = 1,res[3] = 5-3 = 2
*
* 【 ... 】 依次类推即可得到最终的res
*
* @author Mr IMMUNIZE
*
*/
public class Solution {
public int[] dailyTemperatures(int[] T) {
// 初始化结果数组
int[] res = new int[T.length];
// 使用堆栈记录每次入栈的数的下标索引,
Stack<Integer> stack = new Stack();
for (int i = 0; i < T.length; i++) {
while (!stack.empty() && T[i] > T[stack.peek()]) {
res[stack.peek()] = i - stack.peek();
stack.pop();
}
stack.add(i);
}
// 返回结果数组
return res;
}
}
复杂度 | 时间复杂度 | 空间复杂度 |
---|---|---|
暴力法 | O(n²) | O(n) |
栈解法 | O(n) | O(n) |