代码随想录:单调栈专题

news2024/10/10 7:20:52

739. 每日温度

用数组模拟栈,tt指向栈顶。
从尾部开始遍历,如果当前温度大于等于栈顶的温度就把栈顶温度删了,因为再往前的元素比它大的最近的都不可能是这个。
如果栈有元素,取出下标与当前下标做差
最后把该下标放入栈中

class Solution {
public:
    vector<int> dailyTemperatures(vector<int>& temperatures) {
        int n=temperatures.size();
        vector<int> answer(n,0);
        int stk[100005],tt=0;
        for(int i=n-1;i>=0;i--)
        {
            while(tt&&temperatures[i]>=temperatures[stk[tt]])tt--;
            if(tt)answer[i]=stk[tt]-i;
            stk[++tt]=i;
        }
        return answer;
    }
};

496. 下一个更大元素 I

对于这题我们先遍历nums2数组,把每一个元素最右边的更大值存进哈希表里,再遍历一遍nums1数组即可。
stk依旧用数组模拟栈,然后遍历一遍nums2,栈中存目前为止的较大元素,如果栈不为空存入哈希表里,否则哈希表里存-1,把当前元素加入栈中。
遍历一遍nums1,把哈希表里对应的值取出来放入答案中。

class Solution {
public:
    vector<int> nextGreaterElement(vector<int>& nums1, vector<int>& nums2) {
     int l1=nums1.size(),l2=nums2.size();
     unordered_map<int,int> m;
     vector<int>ant;
     int stk[1005],tt=0;
     for(int i=l2-1;i>=0;i--)
     {
      while(tt&&nums2[i]>=stk[tt])tt--;
      if(tt)m[nums2[i]]=stk[tt];
      else m[nums2[i]]=-1;
      stk[++tt]=nums2[i];
     }
     for(int i:nums1)
     ant.push_back(m[i]);
     return ant;
    }
};

503. 下一个更大元素 II

这道题先遍历一遍数组,初始化一下单调栈,再从尾部往前遍历一遍,更新答案,栈不为空就放入栈中

class Solution {
public:
    vector<int> nextGreaterElements(vector<int>& nums) {
    int l=nums.size();
    vector<int>ant(l);
    int stk[10005],tt=0;
    for(int i=l-1;i>=0;i--)
    {
        while(tt&&nums[i]>=stk[tt])tt--;
        stk[++tt]=nums[i];
    }
    for(int i=l-1;i>=0;i--)
    {
        while(tt&&nums[i]>=stk[tt])tt--;
        if(tt)ant[i]=stk[tt];
        else ant[i]=-1;
        stk[++tt]=nums[i];
    }
    return ant;
    }
};

42. 接雨水

这里采用两次遍历,找每个位置左右两边的最大高度,注意不是最近的比它大的高度,然后算一下两边位置的较小值,与height[i]做差加到answer中

class Solution {
public:
    int trap(vector<int>& height) {
     int answer=0;
     int n=height.size();
     vector<int> left(n+5,-1),right(n+5,-1);
     vector<int> stk(n+5);int tt=0;
     for(int i=0;i<n;i++)
     {
        while(tt&&height[i]>=stk[tt])tt--;
        if(tt)left[i]=stk[tt];
        else stk[++tt]=height[i];
     }
     tt=0;
     for(int i=n-1;i>=0;i--)
     {
        while(tt&&height[i]>=stk[tt])tt--;
        if(tt)right[i]=stk[tt];
        else stk[++tt]=height[i];
     }
     for(int i=1;i<=n-2;i++)
     {
        int t=min(left[i],right[i]);
        if(t>0)answer+=t-height[i];
     }
     return answer;
    }
};

84. 柱状图中最大的矩形

这道题也是用两边单调栈,但跟上一题有略微的小调整,栈里存下标,并且处理方式也不一样,这里是较小栈。
最后遍历算面积取最大值即可

class Solution {
public:
    int largestRectangleArea(vector<int>& heights) {
    int n=heights.size();
vector<int> left(n),right(n);
int ant=0;   int stk[100005],tt=0;
    for(int i=0;i<n;i++)
    {
        while(tt&&heights[i]<=heights[stk[tt]])tt--;
        if(tt)left[i]=stk[tt];
        else left[i]=-1;
        stk[++tt]=i;
    }
    tt=0;
    for(int i=n-1;i>=0;i--)
    {
        while(tt&&heights[i]<=heights[stk[tt]])tt--;
        if(tt)right[i]=stk[tt];
        else right[i]=n;
        stk[++tt]=i;
    }

    for(int i=0;i<n;i++)
    {
        ant=max(ant,(right[i]-left[i]-1)*heights[i]);
    }
    return ant;
    }
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2201418.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

大学离散数学:开启逻辑与思维的奇妙之旅

在大学的知识殿堂中&#xff0c;离散数学犹如一颗璀璨的明珠&#xff0c;散发着独特的魅力。 离散数学是现代数学的一个重要分支&#xff0c;它主要研究离散对象的结构及其相互关系。与连续数学不同&#xff0c;离散数学处理的是离散的、可数的对象&#xff0c;如整数、图、集…

Kubernetes简介与部署+Pod管理与优化

一、简介 1.基础信息 在Docker 作为高级容器引擎快速发展的同时&#xff0c;在Google内部&#xff0c;容器技术已经应用了很多年Borg系统运行管理着成干上万的容器应用。Kubernetes项目来源于Borg&#xff0c;可以说是集结了Borg设计思想的精华&#xff0c;并且吸收了Borg系统…

动态线程池设计与实现

为什么要有动态线程池 ThreadPoolExecutor 核心线程参数对某些业务不知到设置多少合适调整参数需要重新启动服务没有告警功能 设计思路 流程设计 库表抽象 更新操作流程图 代码实现 GitCode - 全球开发者的开源社区,开源代码托管平台

C++ 内部类

个人主页&#xff1a;Jason_from_China-CSDN博客 所属栏目&#xff1a;C系统性学习_Jason_from_China的博客-CSDN博客 所属栏目&#xff1a;C知识点的补充_Jason_from_China的博客-CSDN博客 概念概述 如果一个类定义在另一个类的内部&#xff0c;这个内部类就叫做内部类。内部类…

(02)python-opencv图像处理——更改颜色空间HSV

前言 1、更改颜色空间 1.1BGR 到 Gray 的示例 1.2 BGR 到 HSV 的示例&#xff1a; ​编辑 1.3 通过HSV进行颜色追踪 1.3.1hsv cv.cvtColor(frame, cv.COLOR_BGR2HSV) 1.3.2 BGR vs HSV&#xff1a; 1.3.3 为什么使用 HSV 颜色空间&#xff1f; 1.3.4 cv.inRange(hsv…

oracle-函数-instr()的妙用以及相似功能like

INSTR(C1,C2[,I[,J]]) 【功能】在一个字符串中搜索指定的字符,返回发现指定的字符的位置; 【说明】多字节符(汉字、全角符等)&#xff0c;按1个字符计算 【参数】 C1 被搜索的字符串 C2 希望搜索的字符串 I 搜索的开始位置,默认为1 J 第J次出现的位置,默认为1 【…

安全帽未佩戴预警系统 劳保防护用品穿戴监测系统 YOLO

在建筑、矿山、电力等高危行业中&#xff0c;工人面临着各种潜在的危险&#xff0c;如高空坠物、物体打击等。安全帽能够有效地分散和吸收冲击力&#xff0c;大大降低头部受伤的严重程度。一旦工人未正确佩戴安全帽&#xff0c;在遭遇危险时&#xff0c;头部将直接暴露在危险之…

Linux网络编程 -- 网络套接字预备与udp

本文主要介绍网络编程的相关知识&#xff0c;在正式介绍网络编程之前&#xff0c;我们得先了解一些前置的知识。 1、端口号 我们上网其实就是两种动作&#xff0c;一个是将远处的数据拉取到本地&#xff0c;另一个是把我们的数据发送给远端。其实大部分的网络通信行为都是用户…

基于springboot vue3 工商局商家管理系统设计与实现

博主介绍&#xff1a;专注于Java&#xff08;springboot ssm springcloud等开发框架&#xff09; vue .net php phython node.js uniapp小程序 等诸多技术领域和毕业项目实战、企业信息化系统建设&#xff0c;从业十五余年开发设计教学工作☆☆☆ 精彩专栏推荐订阅☆☆☆☆…

【公共祖先】二叉树专题

里面涉及多个plus题 前言1.二叉树的最近公共祖先2.二叉搜索树的最近公共祖先3.二叉树的最近公共祖先II4.二叉树的最近公共祖先III5.二叉树的最近公共祖先IV 前言 公共祖先这一类题目&#xff0c;难度不大&#xff0c;但是非常实用&#xff0c;也是面试问到概率比较大的一类题目…

夜间数据库IO负载飙升?MySQL批量删除操作引发的问题排查

目录 问题现象 问题分析 修改建议 总结 问题现象 近日&#xff0c;某用户反馈他们的MySQL数据库实例在凌晨时段会频繁出现IO负载急剧上升的情况&#xff0c;这种状态会持续一段时间&#xff0c;随后自行恢复正常。为了查明原因&#xff0c;该用户通过DBdoctor工具收集了相…

DLL中函数导出时的注意事项

1.使用.def文件导出函数 1.1示例代码:使用stdcall 关键字 和 extern "C" 关键字修饰 dll中函数 BOOL APIENTRY DllMain( HMODULE hModule,DWORD ul_reason_for_call,LPVOID lpReserved) {switch (ul_reason_for_call){case DLL_PROCESS_ATTACH:case DLL_THREAD_ATT…

sahi密集检测的推理技巧

最近在做一些计数的项目&#xff0c;样本中存在一些非常密集的目标&#xff0c;如果混杂一起训练指标很难达到要求&#xff0c;所以考虑在训练时不加入密集目标&#xff0c;训练使用正常的样本&#xff0c;在推理时使用密集检测方案。 在高分辨率图像中检测小目标一直是一个技…

【Qt+Python项目构建】- 02 Qt creator 14.0 + PySide6 如何让图像控件的尺寸变化和窗口一致

前言&#xff1a;【这是个AI不会回答的问题】 Qt Creator 新的版本又发出了&#xff0c;Pyside6 有很多新功能。但是&#xff0c;一些传统的方法要被淘汰了。 一个经典的例子是&#xff1a; 我有个一个图像要显示在Form里面的图像控件上&#xff0c;OK&#xff0c; 我现在拖…

Unity实现自定义图集(一)

以下内容是根据Unity 2020.1.0f1版本进行编写的   Unity自带有图集工具,包括旧版的图集(设置PackingTag),以及新版的图集(生成SpriteAtlas)。一般来说,unity自带的图集系统已经够用了,但是实际使用上还是存在一些可优化的地方,例如加载到Canvas上的资源,打图集不能…

JVM(学习预热 - 走进Java)(持续更新迭代)

目录 一、彻底认识Java虚拟机 开创世纪&#xff1a;Sun Classic 开创世纪&#xff1a;Exact VM 武林霸主&#xff1a;HotSpot VM 移动端虚拟机&#xff1a;Mobile/Embedded VM “三大”其二&#xff1a;BEA JRockit/IBM J9 VM 软硬结合&#xff1a;BEA Liquid VM/Azul VM…

更新子节点的优化策略1:目标old节点的位置预测

更新子节点的优化策略1&#xff1a;目标old节点的位置预测&#xff1a; 如果 oldStartVnode 和 newStartVnode 是同一个节点&#xff0c;直接 patchVnode&#xff0c;同时 oldStartIdx、newStartIdx 索引都加 1&#xff08;向右移动&#xff09;如果 oldEndVnode 和 newEndVno…

PE结构之 重定位表

那么,我们找到了某个 需要修改的绝对地址 的RVA, 将这个RVA转换成FOA后,这个绝对地址是读DWORD ,还是QWORD? 就是说,32位和64位是否有区别? 实验: 找到重定位表的数据,并观察在内存中和文件中的区别 将引用dll的exe文件,设置一下基址 同时DLL文件的基址和EXE文件设置一样,并…

肝了4天,我用ChatTTS和LLM让deeplearning.ai课程说上流畅中文

以下是「 豆包MarsCode 体验官」优秀文章&#xff0c;作者X2046。 我们都知道外网上有很多优秀的视频教程平台&#xff0c;比如 Coursera 和 deeplearning.ai。尤其是后者&#xff0c;由吴恩达老师与OpenAI、Langchain、LlamaIndex、AutoGen等公司和作者合作&#xff0c;推出了…

Spring Cloud Netflix Hystrix 熔断器讲解和案例示范

在分布式微服务架构中&#xff0c;每个服务之间相互依赖&#xff0c;当某个服务出现故障或延迟时&#xff0c;如果没有有效的故障隔离机制&#xff0c;可能导致整个系统雪崩式的失败。Netflix Hystrix 作为一种熔断器模式&#xff0c;旨在通过隔离服务之间的调用&#xff0c;提…