算法练习题06:leetcode793每日温度

单调栈解法

复制代码
class Solution {
    public int[] dailyTemperatures(int[] temperatures) {
        int length = temperatures.length;
        int[] ans = new int[length];
        Stack<Integer> stack = new Stack<>();
        for(int i = 0;i<length;i++){
            int temperature = temperatures[i];
            while(!stack.isEmpty()&&temperature>temperatures[stack.peek()]){
                int pre = stack.pop();
                ans[pre] = i - pre;
            }
            stack.push(i);
        }
        return ans;
    }
}

不管咋样反正栈为空就先入栈,然后栈中存的是数组中数的索引,遍历这个数组,如果下一个数字比栈顶索引在数组中的值小,那么继续push压入栈,反之,下一个数字比栈顶索引在数组中的值大,那么就达成我们的目的了,找到比栈顶大的数了,那么pop弹出栈顶,i与弹出的那个索引做差值,就是弹出元素索引处的目标值,就是我们要的。画图看的更清楚。

相关推荐
元Y亨H7 分钟前
Nacos - 服务注册
java·微服务
wm104310 分钟前
机器学习第二讲 KNN算法
人工智能·算法·机器学习
NAGNIP12 分钟前
一文搞懂机器学习线性代数基础知识!
算法
NAGNIP17 分钟前
机器学习入门概述一览
算法
曲莫终27 分钟前
Java VarHandle全面详解:从入门到精通
java·开发语言
一心赚狗粮的宇叔38 分钟前
中级软件开发工程师2025年度总结
java·大数据·oracle·c#
奋进的芋圆1 小时前
DataSyncManager 详解与 Spring Boot 迁移指南
java·spring boot·后端
iuu_star1 小时前
C语言数据结构-顺序查找、折半查找
c语言·数据结构·算法
Yzzz-F1 小时前
P1558 色板游戏 [线段树 + 二进制状态压缩 + 懒标记区间重置]
算法
计算机程序设计小李同学1 小时前
个人数据管理系统
java·vue.js·spring boot·后端·web安全