首页 > 编程语言 >算法-单调栈

算法-单调栈

时间:2024-10-18 12:48:15浏览次数:6  
标签:下标 int 算法 temperatures answer stack 单调

1. 每日温度(LeetCode 739)

给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,
其中 answer[i] 是指对于第 i 天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用 0 来代替。

输入: temperatures = [73,74,75,71,69,72,76,73]
输出: [1,1,4,2,1,1,0,0]

思路

  • 单调栈的作用:用于解决寻找右边第一个比当前元素 大/小 的元素
  • 单调栈中存放的是数组的下标
  • 寻找右边第一个比当前元素大的元素时,从栈底到栈顶为递减序列。
  • 时间复杂度:O(n);空间复杂度:O(n)
class Solution {
    // 暴力解法
    public int[] dailyTemperatures(int[] temperatures) {
        int n = temperatures.length;
        int[] answer = new int[n];

        // 单调栈,存放的是下标
        Stack<Integer> stack = new Stack<Integer>();

        // 遍历数组元素
        for(int i = 0; i<n; ++i) {
            if(stack.empty()) {
                stack.push(i);
                continue;
            }
            while(!stack.empty() && temperatures[i] > temperatures[stack.peek()]) {
                answer[stack.peek()] = i-stack.peek();
                // 弹出栈顶下标
                stack.pop();
            } 
            // 下标i入栈
            stack.push(i);
        }

        // 最后留在战中的元素右边,answer默认为0
        return answer;
    }
}

标签:下标,int,算法,temperatures,answer,stack,单调
From: https://www.cnblogs.com/hifrank/p/18474018

相关文章

  • 从组合优化问题建模到贪心法求解以简单调度为例
    此为课题组所指导本科生和低年级硕士生学习组合优化问题汇报所用教材:北京大学屈婉玲教授《算法设计与分析》课程资料:https://www.icourse163.org/course/PKU-1002525003承诺不用于任何商业用途,仅用于学术交流和分享更多内容请关注课题组官方中文主页:https://JaywayXu.github.......
  • 强化学习算法笔记之【Q-learning算法和DQN算法】
    强化学习笔记之【Q-learning算法和DQN算法】前言:强化学习领域,繁冗复杂的大段代码里面,核心的数学公式往往只有20~40行,剩下的代码都是为了应用这些数学公式而服务的这可比遥感图像难太多了,乱七八糟的数学公式看得头大本文初编辑于2024.10.5CSDN主页:https://blog.csdn.net/rvd......
  • 算法与数据结构——桶排序
    桶排序前面的快速排序、归并排序、堆排序等都是属于“基于比较的排序算法”,它们通过比较元素间的大小来实现排序。此类排序算法的时间复杂度无法超越O(nlogn)。下面介绍几种“非比较排序算法”,它们的时间复杂度可以达到线性阶。桶排序(bucketsort)是分治策略的一个典型应用。它通......
  • 八种经典排序算法
    以下是八种经典排序算法的介绍,包括它们的基本思想、时间复杂度、稳定性以及代码示例:1.插入排序基本思想:每步将一个待排序的元素按其关键码值的大小插入到前面已经排序的部分中,直到全部插入完为止。时间复杂度:最坏和平均情况为O(n²),最佳情况为O(n)(当数据基本有序时)。稳定性:......
  • 格点拉格朗日插值与PME算法
    技术背景在前面的一篇博客中,我们介绍了拉格朗日插值法的基本由来和表示形式。这里我们要介绍一种拉格朗日插值法的应用场景:格点拉格朗日插值法。这种场景的优势在于,如果我们要对整个实数空间进行求和或者积分,计算量是随着变量的形状增长的。例如分子动力学模拟中计算静电势能,光是......
  • 传统特征算法——人脸识别
    人脸识别是目前人工智能领域中成熟较早、落地较广的技术之一,广泛应用于手机解锁、支付验证、安防布控等多个领域。其核心在于通过特定的算法识别图像或视频中人脸的身份,这一过程的实现离不开特征算法的支持。以下是对人脸识别特征算法的详细介绍:一、人脸识别系统概述一个......
  • Leetcode刷题. 贪心算法
    贪心算法:    比较传统的解释:将整个问题拆解为几个小问题,找到小问题的最优解,加起来就是整个问题的全局最优解。对于现在的我理解贪心就是一种感觉,给出证明很难,解题思路一般就是认真读题,发掘题目的条件,然后尝试给出算法。11.盛最多水的容器     一个显而易......
  • [算法日常] 逆序对
    [算法日常]逆序对定义在一个长度为\(n\)的数组\(a\)中,若存在\(\forall1\lei,j\len\),使得\(a_i>a_j\),则称\(<a_i,a_j>\)为一对逆序对。举个例子,一个长度为\(5\)的数组为:15364则存在\(3\)个逆序对,分别是\(<5,3>,<5,4>,<6,4>\)。解法F1:显然,可以枚举......
  • STL容器和算法
    1、C++的STL介绍(内存管理、allocator、函数、实现机理、多线程实现)STL一共提供六大组件,包括容器、算法、迭代器、仿函数、配接器和配置器,彼此可以组合套用。容器通过配置器取得数据存储空间,算法通过迭代器存取容器内容,仿函数可以协助算法完成不同的策略变化,配接器可以应用于容......
  • 武汉大学卫星导航算法程序设计——解码与数据获取
    还在为解码发愁吗?面对二进制文件还是无从下手吗?一篇文章帮你搞定。我们从接收机获取的数据并不是rinex格式的文件,而是NovAtel数据格式的二进制文件。我们需要从文件中提取出我们需要的导航数据,也就是解码的过程。废话不多说,我们直接开始讲解。一、Binary数据头格式请不要使......