数据结构 之 栈与单调栈习题 力扣oj(附加思路版)

#include<stack> --栈的头文件

栈的特点 : 先进后出  , 后进先出

相关函数:

        top() 获取栈顶元素 ,返回栈顶元素的值

        pop() 删除栈顶元素  ,没有返回值

        push() 放入元素 ,没有返回值 

        empty() 为空返回 true  否则返回false

        size() 元素的个数 ,返回值为 无符号整型

语法

        stack<int> stk; //创建一个栈,里面的元素是int类型

739. 每日温度icon-default.png?t=N7T8https://leetcode.cn/problems/daily-temperatures/

提示

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

思路

        单调栈,单调栈使用的场景:左边或者右边第一个比他大或者小的。

        创建一个栈,遍历数组,将第一个元素放入栈,每个元素与栈顶比较,当栈不为空且找到后面比栈顶大的一个元素,将栈顶元素弹出,然后利用下标返回数组对应的元素

class Solution {
public:
    vector<int> dailyTemperatures(vector<int>& temp) {
        stack<int>stk;
        vector<int>res(temp.size(),0);    
        stk.push(0);    
        for(int i=1;i<temp.size();i++)
        {
            while(!stk.empty()&&temp[i]>temp[stk.top()])
            {
                res[stk.top()]=i-stk.top();
                stk.pop();
            }
            stk.push(i);//不执行循环和循环结束都执行
        }
        return res;
    }
};

496. 下一个更大元素 Iicon-default.png?t=N7T8https://leetcode.cn/problems/next-greater-element-i/

nums1 中数字 x 的 下一个更大元素 是指 x 在 nums2 中对应位置 右侧 的 第一个 比 x 大的元素。

给你两个 没有重复元素 的数组 nums1 和 nums2 ,下标从 0 开始计数,其中nums1 是 nums2 的子集。

对于每个 0 <= i < nums1.length ,找出满足 nums1[i] == nums2[j] 的下标 j ,并且在 nums2 确定 nums2[j] 的 下一个更大元素 。如果不存在下一个更大元素,那么本次查询的答案是 -1 。

返回一个长度为 nums1.length 的数组 ans 作为答案,满足 ans[i] 是如上所述的 下一个更大元素 。

思路:   

        这个解法通过栈和哈希表来寻找nums1中每个元素在nums2中的下一个更大元素。首先,使用哈希表记录nums1中每个元素的位置。然后,遍历nums2,利用栈来寻找每个元素右侧的第一个更大元素。如果当前元素大于栈顶元素,则找到了栈顶元素的下一个更大元素,此时更新结果数组。通过这种方式,能够高效地为nums1中的每个元素找到其在nums2中的下一个更大元素,如果不存在则结果为-1

class Solution {
public:
    vector<int> nextGreaterElement(vector<int>& nums1, vector<int>& nums2) {
        stack<int>stk;
        map<int,int>m;
        stk.push(0);
        for(int i=0;i<nums1.size();i++)
        {
            m[nums1[i]]=i;
        }
        vector<int>res(nums1.size(),-1);
        for(int i=1;i<nums2.size();i++)
        {
           //栈不为空 并且nums2[i]>nums2[stk[top]]
           //说明stk.pop()这个位置找到了下一个更大元素 
             while(!stk.empty()&&nums2[i]>nums2[stk.top()])
             {
            if(m.find(nums2[stk.top()])!=m.end()) 
                 {
                //m[nums2[stk.top()]]代表的是nums2[stk.top()]在nums1中的下标
                res[m[nums2[stk.top()]]]=nums2[i];
               
             }
              stk.pop();//不管这个元素是不是nums1中的都要弹出否则会卡在这
            }
             stk.push(i);
        }
        return res;
    }
};

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

fs模块与path模块 综合练习

一、自定义一个递归函数&#xff0c;来获取目录下所有的文件信息(目录除外)&#xff0c;以数组形式返回。 注意&#xff1a;因为异步涉及到等待&#xff0c;所以使用同步完成 //导入fs 与 path const fsrequire(fs); const pathrequire(path);function readFiles(paths){ // …

新台阶——蓝桥杯单片机省赛第十四届程序设计题目

在做十四届题目之前&#xff0c;常常听学长说&#xff0c;十四届以前拿省一真的是右手就行&#xff0c;并不相信&#xff0c;在经历十四届痛苦的大量修bug和优化之后&#xff0c;或许学长的话真说对了几分。话不多说&#xff0c;我们开始一起完成单片机第十四届程序设计题目。 …

Vue3 + Vite + TS + Element-Plus + Pinia项目(4)添加element-plus引用

1、main.ts添加引用 import ElementPlus from element-plus import element-plus/dist/index.cssconst app createApp(App) app.use(ElementPlus) app.mount(#app) 2、在 tsconfig.json 中通过 compilerOptions.type 指定全局组件类型。

docker 不同架构镜像融合问题解决

1、背景 docker 作为目前容器的标准之一&#xff0c;但是对于多种架构的平台的混合编译支撑不是很好。因此衍生了镜像融合&#xff0c;分别将多种不同的架构构建好&#xff0c;然后将镜像进行融合上传。拉取镜像的会根据当前系统的架构拉取不同的镜像&#xff0c;也可以通过 -…

Web常见标签属性

应用软件&#xff1a;c/s&#xff08;客户端与服务端&#xff09; b/s&#xff08;服务器与浏览器架构&#xff09;web前端&#xff1a;html5、css3、JavaScriptHtml5&#xff1a;超文本标记语言 超链接标签 语法规范<标签名> marquee 标签之间可以嵌套属性&#xff1a;…

基于 Appium 的 Android UI 自动化测试!(建议收藏)

自动化测试是研发人员进行质量保障的重要一环&#xff0c;良好的自动化测试机制能够让开发者及早发现编码中的逻辑缺陷&#xff0c;将风险前置。日常研发中&#xff0c;由于快速迭代的原因&#xff0c;我们经常需要在各个业务线上进行主流程回归测试&#xff0c;目前这种测试大…

【八股】Java线程之间协作

1. 指定线程执行顺序 可以使用join()方法&#xff08;但中间加了Thread.sleep(1000)以后就不按顺序执行&#xff0c;不知道为什么&#xff09; public static void main(String[] args) throws CloneNotSupportedException {// 创建线程对象Thread t1 new Thread(() -> {…

关闭 Microsoft Word 2010 配置窗口

关闭 Microsoft Word 2010 配置窗口 References 出现这种问题&#xff0c;主要是安装时所用账户和目前登陆的账户不为同一个账户造成的。或者你进行过覆盖安装或是重新安装过系统&#xff0c;但是 office 的安装目录没有更改。先激活 Microsoft Office&#xff0c;然后执行下列…

我们使用 Postgres 构建多租户 SaaS 服务时踩的坑

原文 Our Multi-tenancy Journey with Postgres Schemas and Apartment。这篇和之前发出的「如何使用 Postgres 对一个多租户应用分片」相呼应。 多租户 (Multip-tenancy) 是当下的热门话题。我对多租户应用程序的定义是一个能够服务于多个客户的软件系统&#xff0c;每个客户都…

Vscode创建php项目

1.安装中文插件&#xff08;可安装可不安装&#xff09; 2.安装主题&#xff08;可安装可不安装&#xff09; 3.安装和php相关的插件 4.打开文件夹 5.路由操作 查看项目中的route路由 浏览器中访问think 隐藏index.php入口文件 访问ThinkPHP5.1开发手册&#xff0c;复制apa…

uni-app纵向步骤条

分享一下项目中自封装的步骤条&#xff0c;存个档~ 1. 话不多说&#xff0c;先看效果 2. 话还不多说&#xff0c;上代码 <template><!-- 获取一个数组&#xff0c;结构为[{nodeName:"流程发起"isAudit:falsetime:"2024-02-04 14:27:35"otherDat…

Vue上实现上下左右无缝滚动、单步滚动-demo

安装 npm i vue3-seamless-scroll 效果 代码 示例一 <!--* Author: Jackie* Date: 2024-03-13 17:56:55 --> <template><vue3-seamless-scroll :list"list" class"scroll"><div class"item" v-for"(item, index) …

宁波ISO14068碳中和,ISO14068认证,ISO14068辅导

ISO 14068是国际标准化组织&#xff08;ISO&#xff09;&#x1f4dd;发布的关于碳中和的标准✒️&#xff0c;也被称为“碳中和国际标准”。该标准&#x1f9f0;定义了碳中和的&#x1f4f1;概念&#xff0c;包括组织或产品&#x1f460;通过自身减排、边界内&#x1fae7;碳清…

Python从0到100(七):Python列表介绍及运用

一、 列表概述 问题描述&#xff1a; 假设一个班有100个学生&#xff0c;如果每个变量存放一个学生的姓名&#xff0c;是不是很麻烦&#xff1f;如果有一千个学生甚至更多&#xff0c;那该怎么办呢&#xff1f; 列表是Python中的一种数据结构&#xff0c;它可以存储不同类型的…

蓝桥杯学习笔记(贪心)

在很久很久以前&#xff0c;有几个部落居住在平原上&#xff0c;依次编号为1到n。第之个部落的人数为 t 有一年发生了灾荒&#xff0c;年轻的政治家小蓝想要说服所有部落一同应对灾荒&#xff0c;他能通过谈判来说服部落进行联台。 每次谈判&#xff0c;小蓝只能邀请两个部落参…

打通数字化最后一公里,就是数据释放价值的最后一公里;

前 言 2023年底&#xff0c;中共中央、国务院正式印发《关于构建数据基础制度更好发挥数据要素作用的意见》(以下简称《数据二十条》)&#xff0c;明确提出探索数据资产入表新模式&#xff0c;要积极探索数据资产入表的可行路径&#xff0c;加快推动数据入表的实施进度&…

RK3568平台开发系列讲解(Linux系统篇)设备树中时钟描述

🚀返回专栏总目录 文章目录 一、时钟生产者(Clock Provider)1.1、clock-cells1.2、clock-frequency1.3、assigned-clocks 和 assigned-clock-rates1.4、clock-indices1.5、assigned-clock-parents二、时钟消费者(Clock Consumer)2.1、clocks

Matlab之已知2点绘制长度可定义的射线

目的&#xff1a;在笛卡尔坐标系中&#xff0c;已知两个点的位置&#xff0c;绘制过这两点的射线。同时射线的长度可以自定义。 一、函数的参数说明 输入参数&#xff1a; PointA&#xff1a;射线的起点&#xff1b; PointB&#xff1a;射线过的零一点&#xff1b; Length&…

【微服务】认识Dubbo+基本环境搭建

认识Dubbo Dubbo是阿里巴巴公司开源的一个高性能、轻量级的WEB和 RPC框架&#xff0c;可以和Spring框架无缝集成。Dubbo为构建企业级微服务提供了三大核心能力&#xff1a; 服务自动注册和发现、面向接口的 远程方法调用&#xff0c; 智能容错和负载均衡官网&#xff1a;https…

unity 添加newtonsoft-json

再git url上添加&#xff1a;com.unity.nuget.newtonsoft-json