0
点赞
收藏
分享

微信扫一扫

Leetcode 739:每日温度

hwwjian 2022-01-25 阅读 153

题目描述:

示例 1:

示例 2:

示例 3:

提示:

解法一:暴力法

思路:

使用双重循环遍历数组即可。

代码:

class Solution {
    public int[] dailyTemperatures(int[] temperatures) {
        int[] res = new int[temperatures.length];
        for (int i = 0; i < temperatures.length - 1; i++) {
            for (int j =  i + 1; j < temperatures.length; j++) {
                if (temperatures[j] > temperatures[i]) {
                    res[i] = j - i;
                    break;
                }
            }
        }
        return res;
    }
}

解法二:栈

思路:

1、使用栈维护数组下标。

2、遍历数组:

  • 当前元素小于或者等于栈顶元素,将当前元素下标入栈
  • 当前元素大于栈顶元素,先弹出栈中小于当前元素值的元素下标val=stack.pop(),并将当前下标与val的差值作为结果集的元素,即:result[val] = i - val;

代码:

class Solution {
    public int[] dailyTemperatures(int[] temperatures) {
        //结果数组
        int[] result = new int[temperatures.length];
        //辅助栈
        Stack<Integer> stack = new Stack<>();
        for(int i=0; i < temperatures.length; i++){
            //当栈不为空,且栈顶元素小于当前当前元素时,出栈并计算天数
            while(!stack.isEmpty() && temperatures[i] > temperatures[stack.peek()]){
                int val = stack.pop();
                result[val] = i -val;
            }
            //将下标入栈
            stack.push(i);
        }
        return result;
    }
}
举报

相关推荐

0 条评论