DAY58 单调栈

news/2025/2/16 4:57:25/

通常是一维数组,要寻找任一个元素的右边或者左边第一个比自己大或者小的元素的位置,此时我们就要想到可以用单调栈了

class Solution {

public:

    vector<int> dailyTemperatures(vector<int>& temperatures) {

        vector<int>result(temperatures.size(),0);

        stack<int> st;

        st.push(0);

        for(int i=1;i<temperatures.size();i++){

            if(temperatures[i]<=temperatures[st.top()] ){

                st.push(i);

            }

            else{

                while(!st.empty()&& temperatures[i]>temperatures[st.top()]){

                    result[st.top()]=i-st.top();

                    st.pop();

                }

                st.push(i);

            }

        }

        return result;

    }

};

还是要注意 你在栈里存储的是下标 而不是数值

注意啊注意 首先map 你应该去用unordered_map 不是unorder_map 要注意ed

另外map和数组的区别就是 数组是连续的 然后map它的键值是不固定的 可以随机选定

另外map找的话 可以使用map1(key) 去找value

class Solution {

public:

    vector<int> nextGreaterElement(vector<int>& nums1, vector<int>& nums2) {

        stack<int>st;

        st.push(0);

        unordered_map <int,int> map1;

        for(int i=0;i<nums1.size();i++){

            map1[nums1[i]]=i;

        }

        vector<int>result(nums1.size(),-1);

        for(int i=1;i<nums2.size();i++){

            if(nums2[i]<=nums2[st.top()]){

                st.push(i);

            }

            else{

                while( !st.empty() && nums2[i]>nums2[st.top()] ){

                    if(map1.count(nums2[st.top()])>0){

                        result[map1[nums2[st.top()]]]=nums2[i];

                    }

                    st.pop();

                }

                st.push(i);

            }

        }

        return result;

    }

};

另外是返回下一个元素的下标 还是本身 还是要去考虑清楚的


http://www.ppmy.cn/news/1026445.html

相关文章

ONVIF对讲功能漫谈

ONVIF对讲功能漫谈 前言一、onvif对讲功能和onvif协议关系大吗?二、如何上报设备支持onvif对讲功能呢?三、onvif协议中哪个接口上报音频解码配置?四、献上抓包报文:前言 本篇文章尝试使用提问的方式来分享onvif对讲功能那点事。 一、onvif对讲功能和onvif协议关系大吗? on…

Flink-网络流控及反压剖析

参考&#xff1a; Apache Flink学习网

Python爬虫:js逆向调式操作及调式中遇到debugger问题

Python爬虫:js逆向调式操作及调式中遇到debugger问题 1. 前言2. js逆向调式操作2.1 DOM事件断点2.2 XHR/提取断点(用于请求接口参数加密处理)2.3 请求返回的数据是加密的2.4 hook定位参数 3. 调式中遇到debugger问题3.1 解决方式(一律不在此处暂停)3.2 问题&#xff1a;点击一律…

uniapp 自定义手机顶部状态栏不生效问题

想要的效果想淘宝一样&#xff0c;底色覆盖到手机顶部&#xff0c;找了两天都没找到原因&#xff0c;过程很艰苦&#xff0c;直接上结果吧 项目是后来接手的&#xff0c;最终原因出在这&#xff0c; "immersed" : false>设置为 true 就可以了&#xff0c;沉浸式样…

P1024 一元三次方程求解

题目链接&#xff1a; 方法一、二分 因为区间很大&#xff0c;所以可以二分。 三个答案都在 [ − 100 , 100 ] [-100,100] [−100,100]范围内&#xff0c;两个根的差的绝对值 ⩾ 1 \geqslant1 ⩾1,保证了每一个大小为 1 1 1的区间里至多有 1 1 1个解&#xff0c;也就是说当区间…

Jay17 2023.8.12日报

8.12 今天做了2题&#xff0c;CTFshow 红包挑战8&#xff08;PHP create_function()&#xff09;和BUU [RoarCTF 2019]Easy Java&#xff08;web.xml泄露&#xff09;。 此外一直在打NepCTF&#xff0c;出了一题&#xff08;ez_java_checkin&#xff09;简单了解了java中shri…

深入理解Linux内核--虚拟文件

虚拟文件系统(VFS)的作用 虚拟文件系统(Virtual Filesystem)也可以称之为虚拟文件系统转换(Virtual Filesystem Switch,VFS), 是一个内核软件层&#xff0c; 用来处理与Unix标准文件系统相关的所有系统调用。 其健壮性表现在能为各种文件系统提供一个通用的接口。VFS支持的文件…

如何快速的让自己从月入2000变成月入两万?

从月入2000变成月入两万 前言我们可以这么做&#xff1a;1.提升自己的技能&#xff1a;2.寻找更好的工作机会&#xff1a;寻找更好的工作机会是一个重要的目标&#xff0c;以下是几个建议&#xff1a; 3.开展副业或兼职工作&#xff1a;4.创业或投资&#xff1a;5.构建个人品牌…