(单调栈) 496. 下一个更大元素 I——【Leetcode每日一题】

news/2023/12/1 11:34:00

❓496. 下一个更大元素 I

难度:简单

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

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

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

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

示例 1:

输入:nums1 = [4,1,2], nums2 = [1,3,4,2].
输出:[-1,3,-1]
解释:nums1 中每个值的下一个更大元素如下所述:

  • 4 ,用加粗斜体标识,nums2 = [1,3,4,2]。不存在下一个更大元素,所以答案是 -1 。
  • 1 ,用加粗斜体标识,nums2 = [1,3,4,2]。下一个更大元素是 3 。
  • 2 ,用加粗斜体标识,nums2 = [1,3,4,2]。不存在下一个更大元素,所以答案是 -1 。

示例 2:

输入:nums1 = [2,4], nums2 = [1,2,3,4].
输出:[3,-1]
解释:nums1 中每个值的下一个更大元素如下所述:

  • 2 ,用加粗斜体标识,nums2 = [1,2,3,4]。下一个更大元素是 3 。
  • 4 ,用加粗斜体标识,nums2 = [1,2,3,4]。不存在下一个更大元素,所以答案是 -1 。

提示

  • 1 < = n u m s 1. l e n g t h < = n u m s 2. l e n g t h < = 1000 1 <= nums1.length <= nums2.length <= 1000 1<=nums1.length<=nums2.length<=1000
  • 0 < = n u m s 1 [ i ] , n u m s 2 [ i ] < = 1 0 4 0 <= nums1[i], nums2[i] <= 10^4 0<=nums1[i],nums2[i]<=104
  • nums1nums2中所有整数 互不相同
  • nums1 中的所有整数同样出现在 nums2

进阶:你可以设计一个时间复杂度为 O(nums1.length + nums2.length) 的解决方案吗?

💡思路:单调栈 + 哈希表

本题 和739. 每日温度 如出一辙!

  1. 定义 ans 数组存放答案:题目说如果不存在对应位置就输出 -1 ,所以 ans 数组如果某位置没有被赋值,那么就应该是是 -1,所以就初始化为 -1

  2. 定义map 映射表,存放在nums1 元素对应的下标:遍历 nums2 的过程中,我们要判断 nums2[i] 是否在 nums1 中出现过,因为最后是要根据nums1 元素的下标来更新 ans 数组。

注意题目中说是两个没有重复元素 的数组 nums1nums2
没有重复元素,我们就可以用 map 来做 映射 了。根据 数值快速找到下标,还可以判断 nums2[i] 是否在 nums1 中出现过。

  1. 我们在遍历 nums2 时,实时维护一个单调栈 st,存放没有找到 下一个更大元素 的元素:
    • 若栈为空 ,则将 nums[i] 入栈;
    • 若栈不为空, 判断 nums[i] 是否大于栈顶元素 :
      • nums[i] 大于则栈顶元素,则栈顶元素的 下一个更大元素 就是 nums[i] ,栈顶元素出栈;再循环判断栈顶元素
      • nums[i] 小于栈顶元素,则将 nums[i] 入栈。

🍁代码:(Java、C++)

Java

class Solution {public int[] nextGreaterElement(int[] nums1, int[] nums2) {int[] ans = new int[nums1.length];Arrays.fill(ans, -1);HashMap<Integer, Integer> map = new HashMap<>();for(int i = 0; i < nums1.length; i++){map.put(nums1[i], i);}Stack<Integer> st  = new Stack<>();for(int num : nums2){while(!st.isEmpty() && num > st.peek() && map.containsKey(st.peek())){ans[map.get(st.peek())] = num;st.pop();}st.push(num);}return ans;}
}

C++

class Solution {
public:vector<int> nextGreaterElement(vector<int>& nums1, vector<int>& nums2) {vector<int> ans(nums1.size(), -1);unordered_map<int, int> map;for(int i = 0; i < nums1.size(); i++){//数组中的元素对应所在nums1中的数组下标map[nums1[i]] = i;}stack<int> st;for(int num : nums2){while(!st.empty() && num > st.top() && map.find(st.top()) != map.end()){ans[map[st.top()]] = num;st.pop();}st.push(num);}return ans;}
};

🚀 运行结果:

在这里插入图片描述

🕔 复杂度分析:

  • 时间复杂度 O ( m + n ) O(m + n) O(m+n) ,其中 mnums1 的长度,nnums2的长度。我们需要遍历 nums2以计算 nums2中每个元素右边的第一个更大的值;需要遍历 nums1以生成查询结果。
  • 空间复杂度 O ( m ) O(m) O(m),哈希表所需要的存储空间。

题目来源:力扣。

放弃一件事很容易,每天能坚持一件事一定很酷,一起每日一题吧!
关注我LeetCode主页 / CSDN—力扣专栏,每日更新!

注: 如有不足,欢迎指正!


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

相关文章

2000道面试必问的Java面试八股文及答案整理(2023版)

说快也快&#xff0c;说不快也不慢&#xff01; 年前&#xff0c;陆陆续续&#xff0c;好多大厂都在裁员&#xff1b; 年后&#xff0c;又有一大批程序员失业&#xff0c;找不到避风港&#xff1b; 这时候&#xff0c;就有人说了&#xff0c;为什么找工作这么难&#xff1f;…

【使用Hexo建站简易教程】

使用Hexo建站简易教程 更换主题快速入门下载主题生成静态文件运行服务器、本地预览部署到远程站点 前期准备&#xff1a; 创建Github账号或Gitee账号、Linux服务器、安装了Node.js v12.11.0 及以上版本 1、下载node 地址&#xff1a;点击下载&#xff0c;将其放至服务器解压后…

最新版本Android-Studio2.1.2 Windows7 64bit系统下搭建Android开发环境

windows7 64bit系统下搭建Android开发环境 最新版本Android-Studio2.1.2 注&#xff1a;现在在使用i.MX6Q开发板做嵌入式系统开发&#xff0c;跑的是Android系统&#xff0c;想在开发板写一些测试程序&#xff0c;因此搭建了Android开发环境&#xff0c;以下内容是本人整理的开…

U盘安装CentOS7

记录一次U盘向笔记本安装 CentOS 的经过 1. 制作镜像 先从 centos.org 下载镜像 iso&#xff0c;使用 UltraISO 9.6 以上版本向 U 盘写入镜像。写入完成后&#xff0c;查看一下 U 盘的标签&#xff0c;将它修改为尽可能短的内容&#xff0c;如 CENTOS-7 并牢记它&#xff0c;一…

mysql中的group by 和 having使用

mysql中的group by 和 having 使用 理论 –sql中的group by 用法解析&#xff1a; – Group By语句从英文的字面意义上理解就是“根据(by)一定的规则进行分组(Group)”。 –它的作用是通过一定的规则将一个数据集划分成若干个小的区域&#xff0c;然后针对若干个小区域进行数…

阿里巴巴高级算法专家威视:组建技术团队的一些思考

点击上方“朱小厮的博客”&#xff0c;选择“设为星标” 后台回复”1024“获取公众号专属1024GB资料 来源&#xff1a;阿里巴巴中间件 因为信任&#xff0c;所以简单。 本文是我从2019年1月底接手CRO线NLP算法团队以来&#xff0c;在团队组建、能力建设、以及管理上的一些思考&…

联想天逸100安装linux,SWAP配置_tianyi_666的博客的技术博客_51CTO博客

记得&#xff1a;用快乐去奔跑&#xff0c;用心去倾听&#xff0c;用思维去发展&#xff0c;用努力去奋斗&#xff0c;用目标去衡量&#xff0c;用爱去生活。 SWAP 简介 Linux 中的 SWAP(交换分区)&#xff0c;类似于 Windows 的虚拟内存。系统会把一部分硬盘空间虚拟成内存使用…

电脑永久删除的文件在哪里找

电脑永久删除的文件在哪里找?在我们使用电脑的过程中&#xff0c;有时候我们需要删除一些文件或数据以释放存储空间。大多数人认为删除文件后该文件就从电脑中完全消失了&#xff0c;但实际上&#xff0c;删除的文件并不是真正意义上的消失&#xff0c;它只是不再出现在文件夹…

感性了解一下互斥和信号量

一、互斥的四个概念 我们把大家都能看到的资源叫做&#xff1a;公共资源 a、互斥&#xff1a;任何一个时刻&#xff0c;都只允许一个执行流在进行共享资源的访问——加锁 b、我们把任何一个时刻&#xff0c;都只允许一个执行流进行访问的共享资源叫做临界资源 c、临界资源需…

C#读写EM4205/4305/4469卡复制ID卡制做FDX-B动物标签源码

EM4305/EM4205卡是采用瑞士EM微电子公司工作频率为125kHz&#xff0c;具有读、写功能的非接触式RFID射频芯片&#xff0c;它具有功耗低、可提供多种数据传输速率和数据编码方法等特点&#xff0c;适合射频芯片ISO 11784/11785规范&#xff0c;该芯片被广泛应用于动物识别和跟踪…

【6.07 代随_50day】 买卖股票的最佳时机 III、买卖股票的最佳时机 IV

买卖股票的最佳时机 III、买卖股票的最佳时机 IV 买卖股票的最佳时机 III1.动态规划方法图解步骤递归代码 买卖股票的最佳时机 IV1.动态规划方法图解步骤代码 买卖股票的最佳时机 III 力扣连接&#xff1a;123. 买卖股票的最佳时机 III&#xff08;中等&#xff09; 1.动态规…

数据线如何申请办理检验报告,需要的资料有什么?

为了提高天猫数码电器行业的总体产品品质&#xff0c;更好地规范卖家的发布行为。淘宝规定所有在天猫销售的数码电器类商品&#xff0c;包括(厨房电器、生活电器、个人护理/保健/按摩器材、闪存卡/U盘/存储/移动硬盘、3C数码配件市场、影音电器、电脑硬件/显示器/电脑周边、手机…

如何检查 ODBC SQL Server 驱动程序版本 (Windows)

您的计算机可能包含来自 Microsoft 和其他公司的多种 ODBC 驱动程序。使用 Windows ODBC 数据源管理器可以查看已安装的驱动程序的版本。 检查 ODBC SQL Server 驱动程序版本&#xff08;32 位 ODBC&#xff09; 在 ODBC 数据源管理器中&#xff0c;单击**“驱动程序”**选项卡…

python父亲节礼物_父亲节有什么礼物可以推荐?

又到6月份了&#xff0c;马上就是父亲节了&#xff0c;很多人都在为父亲节到底要送什么礼物而烦恼&#xff0c;这种烦恼其实也是幸福的&#xff0c;说明你懂事了。父爱如山&#xff0c;一般父亲都不善于表达&#xff0c;默默地给爱着我们。 今天给大家带来一份最走心撩爸攻略&…

CodeForces..奇数查询.[简单].[数组计算].[n项和]

题目描述&#xff1a; 题目解读&#xff1a; 给定数组an&#xff0c;将数组内第l位到第r位的元素变为k&#xff0c;问数组元素和会变为奇数吗&#xff1f; 第一行输入数组长度n和查询&#xff08;改写&#xff09;次数q 第二行输入数组所有元素 接下来q行输入 l&#xff0c…

URL到页面: 探索网页加载的神秘过程

当我们从浏览器的地址栏输入 URL, 按下回车, 再到最后出现需要的网页界面, 这中间究竟发生了什么, 接下来就一步步进行解析. 主要是如下过程: 输入网址DNS 解析客户端发送 HTPP 请求建立 TCP 连接服务器处理请求, 计算响应, 返回响应浏览器渲染页面关闭连接 本篇中只是概述整…

H3C交换机常用命令大全

一.用户配置: system-view [H3C]super password H3C 设置用户分级密码 [H3C]undo super password 删除用户分级密码 [H3C]localuser bigheap 123456 1 Web网管用户设置,1&#xff08;缺省&#xff09;为管理级用户,缺省admin,admin [H3C]undo localuser bigheap 删除Web网管用…

time.h 详细介绍

time.h 详细介绍 < ctime> (time.h)包含获得和使用日期和时间信息的函数的定义。一、Macro constants&#xff08;宏常量&#xff09; CLOCKS_PER_SEC&#xff1a;滴答声/秒&#xff0c;时间的单位NULL&#xff1a;空指针 二、types&#xff08;类型&#xff09; clo…

HI3516A/Hi3516D H265流结构分析

HI3516A/Hi3516D H265 ES流结构分析 通过录制H265的ES流&#xff0c;保存为文件&#xff0c;经过VLC(版本为V2.2.1),播放可以正常显示。在文件中查找00 00 00 01NALU头&#xff0c;发现在有6种开头分别为&#xff1a; 1&#xff09;00 00 00 01 40 01 2&#xff09;00 00 00 01…

机器人学回炉重造(1):正运动学、标准D-H法与改进D-H法的区别与应用(附ABB机械臂运动学建模matlab代码)

写在前面 学习代码都记录在个人github上&#xff0c;欢迎关注~ 书读百遍&#xff0c;其义自见。 要想当一名合格的机器人工程师&#xff0c;机器人学就是base_link&#xff0c;看多少遍都不为过。现在回炉重造一下&#xff0c;记录一下学习笔记&#xff08;以照片形式&#…
最新文章