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;
    }
}
相关推荐
鹿角片ljp2 小时前
LeetCode 46. 全排列|吃透回溯
算法·leetcode·职场和发展
鼎艺创新科技2 小时前
不依赖 UE/Unity:我们如何从零搭建一套国产三维 GIS 渲染引擎
人工智能·算法·unity·游戏引擎·三维电子沙盘
程序员三藏2 小时前
Python+requests实现接口自动化测试
自动化测试·软件测试·python·测试工具·职场和发展·测试用例·接口测试
.道阻且长.4 小时前
11.LeetCode算法习题讲解--滑动窗口--将x减到0的最小操作数
算法·leetcode·职场和发展
wenyq74 小时前
LeetCode 2460. Apply Operations to an Array
算法·leetcode
.格子衫.5 小时前
032动态规划之区间DP——算法备赛
算法·动态规划
青 春 记 忆5 小时前
LeetCode 142. 环形链表 II|Python 解法详解
python·leetcode·链表
小欣加油6 小时前
leetcode3069 将元素分配到两个数组中I
数据结构·c++·算法·leetcode·职场和发展
不会代码的小猴6 小时前
7. JSON
开发语言·c++·笔记·qt·算法·json
怪奇云呼军7 小时前
知识库也会注入指令?闪电智能VoiceAgent 如何防住 Prompt Injection
人工智能·python·算法·云计算·音视频