LeetCode:739. 每日温度

简介

题目链接:https://leetcode.cn/problems/daily-temperatures/description/

解决方式:数组 + 暴力枚举 / 单调栈

暴力枚举

思路:可以直接双重循环。外层循环迭代每一个元素,内层循环找到更高的温度。

java 复制代码
class Solution {
    public int[] dailyTemperatures(int[] temperatures) {
        int n = temperatures.length;
        int[] answer = new int[n];
        for (int i = 0; i < n; i++) {
            for (int j = i + 1; j < n; j++) {
                if (temperatures[j] > temperatures[i]) {
                    answer[i] = j - i;
                    // 找到一个直接迭代下一个元素
                    break;
                }
            }
        }
        // 返回结果
        return answer;
    }
}

单调栈

思路:暴力枚举的方式时间复杂度太高,我们可以借助栈实现一次遍历。维护一个单调递减的栈,从栈底到栈顶单调递减。迭代每一个元素,若当前元素比栈顶元素大,说明栈顶元素遇到下一个更高的温度,出栈并记录。继续比较新的栈顶与当前迭代元素,因为新的栈顶元素比原来的大,所以有可能比当前迭代元素大,也可能小,所以继续比较,看看谁大谁小,如此循环。

java 复制代码
class Solution {
    public int[] dailyTemperatures(int[] temperatures) {
        int n = temperatures.length;
        // 结果集合
        int[] answer = new int[n];
        // 单调递减栈(栈底 -> 栈顶)
        Deque<Integer> stack = new ArrayDeque<>();
        // 迭代
        for(int i = 0; i < n; i++){
            // 栈不为空且迭代元素比栈顶元素大,则栈顶元素出栈并标记遇到更大温度
            while(!stack.isEmpty() && temperatures[i] > temperatures[stack.peek()]){
                // 出栈
                int pindex = stack.pop();
                // 记录更高温度
                answer[pindex] = i - pindex; 
            }
            // 迭代元素入栈(索引)
            stack.push(i);
        }
        // 返回结果
        return answer;
    }
}
相关推荐
碧海银沙音频科技研究院1 小时前
炬芯ATS3089X手表的HFP通话不自动路由到设备BT的问题解决
网络·人工智能·嵌入式硬件·算法
mmmmath_36 小时前
LeetCode.199.二叉树的右视图
数据结构·leetcode
专注仿真6 小时前
引擎扩展性与集成设计深度剖析:从 14 个扩展点到 DIS→HLA 演进之路
开发语言·算法·仿真引擎·推演引擎
码爸7 小时前
支持向量机介绍与示例
算法·机器学习·支持向量机
怕浪猫7 小时前
2028编程圈很火的10个Skills
算法·面试·github
Nil20811 小时前
leetcode 198打家劫舍
算法·leetcode·职场和发展
Shaoshing12 小时前
前缀和与差分
java·数据结构·算法·前缀和·差分
mmmmath_312 小时前
LeetCode.429.N叉树的层序遍历
数据结构·leetcode
loulanyue_12 小时前
构建房产认知决策智能:Harness底座与AI自进化的技术实践——读贝壳首席算法科学家尹俊希2026云栖专场演讲
人工智能·算法