【单调栈】下一个更大元素 II

news2024/11/18 21:52:22

文章目录

  • Tag
  • 题目来源
  • 题目解读
  • 解题思路
    • 方法一:单调栈+循环数组
  • 写在最后

Tag

【单调栈+循环数组】【数组】


题目来源

503. 下一个更大元素 II


题目解读

在循环数组中找下一个更大的元素。循环数组指的是,数组的最后一个元素的下一个元素是数组首元素。


解题思路

本题的数据规模为 1 0 4 10^4 104,暴力枚举的时间复杂度为 1 0 8 10^8 108,应该还是可以通过的,这里就不对暴力枚举的方法进行介绍了,读者可自行解决,练练基本功,对于基本的暴力枚举代码力求书写完毕即能通过。

接下来重点介绍【单调栈+哈希表】的解法,也是本题最优的一个解法。

方法一:单调栈+循环数组

单调栈

单调栈中保存的是下标,从栈底到栈顶的下标在数组 nums 中对应的值是单调不升的。

每次我们移动到数组中的一个新的位置 i,我们就将当前单调栈中所有对应值小于 nums[i] 的下标弹出单调栈,这些值的下一个更大元素即为 nums[i](证明很简单:如果有更靠前的更大元素,那么这些位置将被提前弹出栈)。随后我们将位置 i 入栈。

循环数组

因为是要在循环数组中找下一个更大的元素,因此需要数组 nums 的前 n-1 元素拼接在原数组序列的后面,这一点我们可以使用下标取模来实现。第 i 个数用 nums[i % n] 表示。

实现代码

class Solution {
public:
    vector<int> nextGreaterElements(vector<int>& nums) {
        int n = nums.size();
        vector<int> ans(n, -1);
        stack<int> stk;             // 栈存储的是下标
        for(int i = 0; i < 2*n - 1; ++i){
            while(!stk.empty() && nums[stk.top()] < nums[i % n]){
                ans[stk.top()] = nums[i % n];
                stk.pop();
            }
            stk.push(i % n);
        }
        return ans;
    }
};

复杂度分析

时间复杂度: O ( n ) O(n) O(n) n n n 是数组 nums 的长度。每个元素值最多被遍历两次,每个元素值入栈、出栈次数最多一共 4 次。

空间复杂度: O ( n ) O(n) O(n)


写在最后

如果文章内容有任何错误或者您对文章有任何疑问,欢迎私信博主或者在评论区指出 💬💬💬。

如果大家有更优的时间、空间复杂度方法,欢迎评论区交流。

最后,感谢您的阅读,如果感到有所收获的话可以给博主点一个 👍 哦。

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

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

相关文章

Windows 10 没有【休眠】选项的配置操作

目录 一、相关知识 1.1、名词解释 二、睡眠/休眠选项 三、睡眠/休眠配置 3.1 打开休眠配置 3.2 打开休眠功能 一、相关知识 1.1、名词解释 睡眠&#xff1a; 当Windows系统进入睡眠模式之后&#xff0c;将电脑当前的内存中的运行状态和数据存储在硬盘中&#xff0…

关于丢失msvcp71.dll的5个解决办法,msvcp71.dll丢失原因分析

计算机已经成为我们生活和工作中不可或缺的一部分&#xff0c;在使用计算机的过程中&#xff0c;我们经常遇到各种软件或应用程序崩溃的情况。其中&#xff0c;一个常见的错误提示是“MSVCP71.dll丢失”。这个错误通常出现在运行使用Visual C Redistributable for Visual Studi…

基于Springboot实现旧物置换网站平台演示【项目源码+论文说明】分享

基于Springboot实现旧物置换网站平台演示 摘要 随着时代在一步一步在进步&#xff0c;旧物也成人们的烦恼&#xff0c;许多平台网站都在推广自已的产品像天猫、咸鱼、京东。所以开发出一套关于旧物置换网站成为必需。旧物置换网站主要是借助计算机&#xff0c;通过对用户进行管…

Tauri | 新版2.0路线图:更强大的插件以及支持 iOS、Android 应用构建

Tauri官方在9月7号发布了新版2.0的路线图&#xff0c;该版本主要是对移动端进行升级&#xff0c;主要特性如下&#xff1a; 强大的插件系统&#xff0c;官方把常用的功能进行了插件化&#xff08;见下图&#xff09;支持使用 Swift、Kotlin 编程语言开发插件&#xff0c;对 iO…

CSP-J第二轮试题-2019年-1、2题

文章目录 参考&#xff1a;总结 [CSP-J2019] 数字游戏题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 样例 #2样例输入 #2样例输出 #2 提示答案答案2 [CSP-J 2019] 公交换乘题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 样例 #2样例输入 #2样例输出 #2 提示…

【@胡锡进】大模型量化分析- 福耀玻璃 600660.SH

SARIMA模型: import pandas as pd import numpy as np from statsmodels.tsa.statespace.sarimax import SARIMAX# 将日期转换为datetime格式 data[date] pd.to_datetime(data[date], format%Y%m%d)# 创建SARIMA模型 model SARIMAX(data[close], order(1, 0, 0), seasonal_o…

智慧空调插座:智控生活好伴侣,节能降耗好帮手

所谓“智能插座”&#xff0c;就是在普通插座上增加Wi-Fi模块&#xff0c;通过手机APP控制单个或整个插座的电源通断&#xff0c;并统计一段时间的用电量。 目前市面上所销售的智能插座&#xff0c;大多具备可连接Wi-Fi网路功能&#xff0c;如此一 来便不需要额外再购买定时控…

聊聊MySQL面试常问名词回表、索引覆盖,最左匹配

文章目录 1. 前言2. 回表操作 Index Lookup2.1 什么是回表2.2 回表的成本2.3 如何避免回表 3. 索引覆盖 Covering Index3.1 什么是索引覆盖3.2 索引覆盖的优点3.3 如何使用索引覆盖 4. 最左匹配原则&#xff08;Leftmost Prefix Match&#xff09;4.1 什么是最左匹配原则4.2 最…

扬尘监测:智能化解决方案让生活更美好

随着工业化和城市化的快速发展&#xff0c;扬尘污染问题越来越受到人们的关注。扬尘不仅影响城市环境&#xff0c;还会对人们的健康造成威胁。为了解决这一问题&#xff0c;扬尘监测成为了一个重要的手段。本文将介绍扬尘监测的现状、重要性以及智能化解决方案&#xff0c;帮助…

csdn问答混赏金的记录贴

本文只记录用户名称&#xff0c;证据详情请点击&#xff1a;证据详情传送门 文章目录 第一位——夜深人静的哝玛 (PS:与本人的头像和用户名大致一样&#xff0c;注意区分)第二位——代码调试大神&#xff08;惯犯&#xff0c;截不完&#xff09;第三位——这一次有糖 第一位——…

03_Node.js模块化开发

1 Node.js的基本使用 1.1 NPM nodejs安装完成后&#xff0c;会跟随着自动安装另外一个工具npm。 NPM的全称是Node Package Manager&#xff0c;是一个NodeJS包管理和分发工具&#xff0c;已经成为了非官方的发布Node模块&#xff08;包&#xff09;的标准。 2020年3月17日&…

vue3+elementPlus el-select 增加全选和取消全选

要求el-select支持多选&#xff0c;并增加全选和取消全选功能&#xff0c;缺点是提交的数据中会有全选这个字段 代码如下 <template><div>全选功能</div><el-select multiple collapse-tags v-modelselectedArray changechangeSelect remove-tagremoveTa…

SignalIR入门

SignalIR入门 简介教程1.创建项目2.添加 SignalR 客户端库3.创建 SignalR 中心4.配置 SignalR5.添加 SignalR 客户端代码 效果 简介 SignalR 是一个用于构建实时 Web 应用程序的开发工具和库&#xff0c;它可以让服务器端代码与客户端代码之间建立双向通信。SignalR 的中文解释…

2023 CCF中国开源大会会议通知(第一轮)

一、会议简介 2023 CCF中国开源大会&#xff08;CCF ChinaOSC&#xff09;拟于2023年10月21日至22日在湖南省长沙市北辰国际会议中心召开。大会由中国计算机学会&#xff08;CCF&#xff09;、开放原子开源基金会主办&#xff0c;CCF开源发展委员会、湖南先进技术研究院承办&a…

Windows服务器 开机自启动服务

1、新建txt&#xff0c;并粘贴下面脚本 start cmd /k "cd /d D:\ahjd&&java -jar clips-admin.jar" start cmd /k "cd /d D:\ahjd\dist&&simple-http-server.exe -i -p 8000"说明&#xff0c;脚本格式为&#xff1a;start cmd /k “cd /d…

OLED透明屏技术在智能手机、汽车和广告领域的市场前景

OLED透明屏技术作为一种新型的显示技术&#xff0c;具有高透明度、触摸和手势交互、高画质和图像显示效果等优势&#xff0c;引起了广泛的关注。 随着智能手机、汽车和广告等行业的快速发展&#xff0c;OLED透明屏技术也在这些领域得到了广泛的应用。 本文将介绍OLED透明屏技…

千万别再学python编程了?编程没用了?马上就要被淘汰啦?

最近&#xff0c;看到网上好多人站在在职程序员的角度去分析编程语言的一个优劣&#xff0c;劝小白学这个语言别学那个语言&#xff0c;这对小白来说是毫无意义的。 但是它又具有极强的一个误导性。 为什么呢&#xff1f; 一、语言只是工具&#xff0c;解决问题才是关键 编程…

web漏洞-SSRF服务端请求伪造

目录 SSRF服务端请求伪造一、定义二、漏洞成因三、漏洞探测四、漏洞利用五、复现pikachu靶场SSRF实验&#xff0c;并且探测靶机端口开放情况。六、利用SSRF探测内网环境并获取shell七、绕过技巧八、SSRF防御方案九、总结 SSRF服务端请求伪造 一、定义 SSRF&#xff08;Server-…

微信小程序拉取代码到运行过程(mac)

微信小程序拉取代码到运行过程&#xff08;mac&#xff09; window也可以参考 1.克隆代码 2.进入项目&#xff0c;安装依赖 此时项目中已经有node_modeles了 3.打开微信开发者工具&#xff0c;导入项目 点击项目-导入 导入刚刚克隆的项目&#xff0c;AppID会自动填入 这里…

基于Springboot实现简历管理系统演示【项目源码+论文说明】分享

基于Springboot实现简历管理系统演示 摘要 随着科学技术的飞速发展&#xff0c;社会的方方面面、各行各业都在努力与现代的先进技术接轨&#xff0c;通过科技手段来提高自身的优势&#xff0c;简历系统当然也不能排除在外。简历系统是以实际运用为开发背景&#xff0c;运用软件…