下一个更大元素 leetcode-496

给你两个 没有重复元素 的数组 nums1 和 nums2 ,其中nums1 是 nums2 的子集。

请你找出 nums1 中每个元素在 nums2 中的下一个比其大的值。

nums1 中数字 x 的下一个更大元素是指 x 在 nums2 中对应位置的右边的第一个比 x 大的元素。如果不存在,对应位置输出 -1 。

示例:
在这里插入图片描述
方法一:双栈(比暴力法好一点)
解题思路:
定义两个stack, stack1存num2, stack2作为temp存stack1 pop出来的值默认max=-1 top= stack1.pop()

  • if top > num => max = top
  • top = num => isfound = True
  • top < num => 继续遍历

每找到一个元素的下一个更大的值之后,需要将temp栈中的元素放回到stack中,以便用于剩下的其他元素寻找下一个更大的值。

while temp:stack.append(temp.pop())

代码实战:

class Solution:def nextGreaterElement(self, nums1: List[int], nums2: List[int]) -> List[int]:stack = []result = []# 将nums2元素全部存入stack栈中for i in nums2:stack.append(i)# 遍历nums1 开始寻找下一个更大的元素for num in nums1:max = -1temp = []isFound = Falsewhile not isFound:top = stack.pop()if top > num:max = topelif top == num:isFound = Truetemp.append(top)result.append(max)while temp:stack.append(temp.pop())return result

复杂度分析:
时间复杂度O(MN)
空间复杂度O(N)

方法二:单调栈+HashMap
解题思路:

  1. 先对 nums2 中的每一个元素,求出它的右边第一个更大的元素;
  2. 将上一步的对应关系放入哈希表(HashMap)中;
  3. 再遍历数组 nums1,根据哈希表找出答案。

代码实战:

class Solution:def nextGreaterElement(self, nums1, nums2):d, stack = {}, []for num2 in nums2:while stack and num2 > stack[-1]:d[stack.pop()] = num2stack.append(num2)return [d.get(j, -1) for j in nums1]

复杂度分析:
时间复杂度:O(N + M),分别遍历数组 nums1 和数组 nums2 各一次即可,对于 nums2 中的每个元素,进栈一次,出栈一次;
空间复杂度:O(N)。我们在遍历 nums2 时,需要使用栈,以及哈希映射用来临时存储答案。

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

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

相关文章

最简单的并查集模板

代码如下&#xff1a; #include <iostream> using namespace std; const int N 1010; int a[N];void init_set() { //初始化for (int i 1; i < N; i)a[i] i; }int find_set(int x) { //查找return x a[x] ? x : find_set(a[x]); }void union_set(int x, int y) …

linux关机方法有哪些?有何区别_Linux下判断是否正常关机的一个简单方法

思想&#xff1a;系统启动的时候生成一个文件&#xff0c;正常关机的时候则删除这个文件&#xff0c;则可以根据系统开机时有没有那个文件来判断是不是非正常关机。步骤&#xff1a;在/etc/rc.d/init.d/下编程脚本。判断是否正常关机&#xff0c;和生成文件的脚本&#xff1a;t…

二叉树的遍历—广度优先(BFS)和深度优先(DFS)python实现

二叉树 二叉树&#xff08;Binary tree&#xff09;是树形结构的一个重要类型。对于二叉树的基础知识这里不做过多介绍&#xff0c;下面我们直接介绍二叉树的遍历方式和如何用python代码去实现二叉树的遍历。 二叉树的遍历&#xff08;重点&#xff09; “前”、“中”、“后…

五分钟了解数据库事务隔离

前言什么是事务隔离呢&#xff1f;们知道&#xff0c;关系型数据基本都支持事务&#xff0c;事务具备四个特性&#xff0c;分别是&#xff1a;原子性&#xff08;Atomicity&#xff09;、一致性&#xff08;Consistency&#xff09;、隔离性&#xff08;Isolation&#xff09;、…

fusionsphere读音_hydroxyapatite

全部Conclusion The absorbable coral hydroxyapatite is a good bone tissue engineering scaffold.结论可吸收性珊瑚羟基磷灰石具有促进骨髓基质细胞表达成骨细胞表型、合成细胞外基质的功能,是良好的细胞载体.互联网Phase changes and structural stability of hydroxyapati…

基于 Redis 实现 CAS 操作

基于 Redis 实现 CAS 操作Intro在 .NET 里并发情况下我们可以使用 Interlocked.CompareExchange 来实现 CAS &#xff08;Compare And Swap&#xff09; 操作&#xff0c;在分布式的情景下很多时候我们都会使用 Redis &#xff0c;最近在改之前做的一个微信小游戏项目&#xff…

数据结构-堆(heap)最大堆、最小堆的相关操作和实战

堆&#xff08;heap&#xff09; 堆的概念&#xff1a; 是完全二叉树&#xff1b;每个节点 > 或 < 孩子节点。 条件二中分别对应&#xff1a;最大堆和最小堆。 最大堆&#xff1a;最大值为堆顶元素&#xff0c;每个节点 > 孩子节点。 最小堆&#xff1a;最小值为堆…

无法载入增效工具_山东省 智能工具箱 智能工具管理 工具管理企业数字化管理...

我们日常工具管理中难免会遇到东西找不到&#xff0c;工具丢失无法落实到人&#xff0c;工具买回来没有及时维护导致生锈等&#xff0c;工具生命周期不细致无法及时送检&#xff0c;导致设备参数不达标等一些细微问题&#xff0c;在工具管理上可能是小问题&#xff0c;但是设备…

Asp.Net Core 中间件应用实战中你不知道的那些事

一、概述这篇文章主要分享Endpoint 终结点路由的中间件的应用场景及实践案例&#xff0c;不讲述其工作原理&#xff0c;如果需要了解工作原理的同学&#xff0c; 可以点击查看以下两篇解读文章&#xff1a;•Asp.Net Core EndPoint 终结点路由工作原理解读•ASP.NET CORE 管道模…

递归算法(一)递归概念与思路

递归的概念 程序调用自身的编程技巧称为递归&#xff08; recursion&#xff09;。递归做为一种算法在程序设计语言中广泛应用。 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法&#xff0c;它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的…

stm32f103振镜_二维振镜激光扫描教学演示装置及其实现方法

二维振镜激光扫描教学演示装置及其实现方法【专利摘要】本发明公开二维振镜激光扫描教学演示装置及其实现方法&#xff0c;该装置包括二维振镜扫描模块、图像轨迹记录仪和上位机人机界面&#xff1b;上位机人机界面主要用于教学演示图形或文字的绘制以及串口通信的设置&#xf…

洛谷 P1706 P1036 -小试牛刀

题目1&#xff1a; 题目描述 输出自然数 1 到 n 所有不重复的排列,即 n 的全排列&#xff0c;要求所产生的任一数字序列中不允许出现重复的数字。 输入格式 一个整数 n。 输出格式 由 1∼n1∼n1∼n 组成的所有不重复的数字序列&#xff0c;每行一个序列。 每个数字保留 5 个…

理解ASP.NET Core中的中间件

中间件是ASP.NET Core的一个重要特点&#xff0c;ASP.NET Core应用程序之所以能够灵活地处理各种各样的请求&#xff0c;完成都是由于中间件&#xff0c;那么它究竟是怎么一回事呢&#xff1f;一、理解中间件ASP.NET Core的一个主要特点是中间件&#xff08;Middleware&#xf…

XGBoost-原理推导(上)

XGBoost简介 XGBoost&#xff08;eXtreme Gradient Boosting&#xff09;是华盛顿大学博士陈天奇创造的一个梯度提升&#xff08;Gradient Boosting&#xff09;的开源框架。至今可以算是各种数据比赛中的大杀器&#xff0c;被大家广泛地运用。 之前的文章我已经介绍了GBDT&a…

redis深度历险_Redis的数据结构(内存具体怎么优化的)

上一篇我们讲解了Redis中SDS的组成以及优势&#xff0c;这一篇我们讨论下Redis中的Hash数据类型是怎么构成的呢&#xff1f;Java中存在HashMap和HashTable的数据类型。而Hash的数据结构可以近似于HashTable&#xff0c;依据数组链表的形式构成。在Redis中&#xff0c;Hash在元素…

.NET Core开发实战(第19课:日志作用域:解决不同请求之间的日志干扰)--学习笔记...

19 | 日志作用域&#xff1a;解决不同请求之间的日志干扰开始之前先看一下上一节的代码// 配置的框架 var configBuilder new ConfigurationBuilder(); configBuilder.AddCommandLine(args); configBuilder.AddJsonFile("appsettings.json", optional: false, reloa…

递归算法(二)-分治法

分治法 分治算法的基本思想是将一个规模为N的问题分解为K个规模较小的子问题&#xff0c;这些子问题相互独立且与原问题性质相同。求出子问题的解&#xff0c;就可得到原问题的解。即一种分目标完成程序算法&#xff0c;简单问题可用二分法完成。 分治法解题的一般步骤&#…

自适应滤波器在matlab仿真的程序_电气信息类专业课程之matlab系统仿真 第五章 BPSK通信系统(3)...

继续讲解&#xff01;上一篇文章提出了那么多问题&#xff0c;不知道大家是否能回答上来啊&#xff1f;如果回答不了&#xff0c;有没有去问问度娘呢&#xff1f;程序写完了&#xff0c;回想了一下辅导2017届学生毕业设计的过程&#xff0c;那是真累。我要求他们在现有程序基础…

阿捷外传之Git代码统计:DotNetCore + PowerBI 实现Git仓库日志分析

前言2020年3月初春&#xff0c;虽然春节已经过去一个多月&#xff0c;大街上还未恢复往年的热闹。由于春节前夕突然降临的冠状病毒&#xff0c;导致很多员工无法回到城市复工。春节之后&#xff0c;阿捷所在的公司考虑到复工带来的风险&#xff0c;通知所有员工以远程的方式在家…

hdu2553 N皇后问题-dfs回溯剪枝+打表

Problem Description 在N*N的方格棋盘放置了N个皇后&#xff0c;使得它们不相互攻击&#xff08;即任意2个皇后不允许处在同一排&#xff0c;同一列&#xff0c;也不允许处在与棋盘边框成45角的斜线上。 你的任务是&#xff0c;对于给定的N&#xff0c;求出有多少种合法的放置方…