496. 下一个更大元素 I
496. 下一个更大元素 I
- 题目
- 分析
- 我的解答
- 官方解答
题目
给定两个 没有重复元素 的数组 nums1 和 nums2 ,其中nums1 是 nums2 的子集。找到 nums1 中每个元素在 nums2 中的下一个比其大的值。
nums1 中数字 x 的下一个更大元素是指 x 在 nums2 中对应位置的右边的第一个比 x 大的元素。如果不存在,对应位置输出 -1 。
示例 1:
输入: nums1 = [4,1,2], nums2 = [1,3,4,2].
输出: [-1,3,-1]
解释:
对于num1中的数字4,你无法在第二个数组中找到下一个更大的数字,因此输出 -1。
对于num1中的数字1,第二个数组中数字1右边的下一个较大数字是 3。
对于num1中的数字2,第二个数组中没有下一个更大的数字,因此输出 -1。
示例 2:
输入: nums1 = [2,4], nums2 = [1,2,3,4].
输出: [3,-1]
解释:
对于 num1 中的数字 2 ,第二个数组中的下一个较大数字是 3 。
对于 num1 中的数字 4 ,第二个数组中没有下一个更大的数字,因此输出 -1 。
提示:
nums1和nums2中所有元素是唯一的。
nums1和nums2 的数组大小都不超过1000。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/next-greater-element-i
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
分析
- 将nums2是无重复元素的数组,新建一个字典dic,key是nums2中的元素,value是相应元素的位置。
- 新建保存结果的空列表
result
- 遍历变量nums1中的元素,通过dic找出他在nums2中的位置i,如果nums2[i:]的最大值没有比当前值大的,-1加入
result
.否则,遍历nums2[i:],如果有大于当前值的,保存到result
,否则,保存-1到result
我的解答
class Solution:def nextGreaterElement(self, nums1, nums2):dic = {}result = []for i,item in enumerate(nums2):dic[item] = il = len(dic)for item in nums1:i = dic[item]if max(nums2[i:])<= item:result.append(-1)else:for temp in nums2[i:]:if temp>item:result.append(temp)breakreturn result
官方解答
哈希映射
栈维护nums2中的元素,字典中保存下一个比当前值大的值
- 新建空栈
stack
,字典dic
- 遍历
nums2
中的元素–item
如果栈为空或者当前元素小于栈顶值,将item
压入栈
否则弹出栈顶值作为key
,dic[key]=item
,将item
压入栈
这两句话直译为
dic = {}
result = []
stack = []
for item in nums2:if len(stack)>0 and stack[-1]>item :# stack[-1] index outof rangestack.append(item)elif len(stack) == 0:stack.append(item)else:while len(stack)>0:dic[stack.pop(-1)] = itemstack.append(item)
翻译一下
- 当stack不为空且栈顶值<
item
时,需要弹出顶值最为key,item为value,直到栈为空或栈顶值>item
. - 把
item
压入栈中
nums2中的每个元素都有一次入栈和出栈动作。
dic = {}
result = []
stack = []
for item in nums2:while len(stack) > 0 and stack[-1] < item:dic[stack.pop(-1)] = itemstack.append(item)
完整版
class Solution:def nextGreaterElement(self, nums1, nums2):dic = {}result = []stack = []for item in nums2:# if len(stack)>0 and stack[-1]>item :# stack[-1] index outof range# stack.append(item)# elif len(stack) == 0:# stack.append(item)## else:while len(stack)>0 and stack[-1]<item:dic[stack.pop(-1)] = itemstack.append(item)# print(dic)for item in nums1:if item in dic:result.append(dic[item])else:result.append(-1)return result
496. 下一个更大元素 I相关推荐
- LeetCode 496. 下一个更大元素 I
599. 两个列表的最小索引总和 添加链接描述 假设 Andy 和 Doris 想在晚餐时选择一家餐厅,并且他们都有一个表示最喜爱餐厅的列表,每个餐厅的名字用字符串表示. 你需要帮助他们用最少的索引和 ...
- Java实现 LeetCode 496 下一个更大元素 I
496. 下一个更大元素 I 给定两个没有重复元素的数组 nums1 和 nums2 ,其中nums1 是 nums2 的子集.找到 nums1 中每个元素在 nums2 中的下一个比其大的值. nu ...
- 496.下一个更大元素I
给定两个没有重复元素的数组 nums1 和 nums2 ,其中nums1 是 nums2 的子集.找到 nums1 中每个元素在 nums2 中的下一个比其大的值. nums1 中数字 x 的下一个更 ...
- LeetCode 496. 下一个更大元素 I 解题思路及C++实现
解题思路: 因为这两个int型的vector中不包含重复元素,所以考虑使用c++中的unordered_map,对num2进行遍历,找到每一个元素的下一个更大元素,这样的话,时间复杂度就是O(n). ...
- Leecode 496. 下一个更大元素 I——Leecode每日一题系列
我是小张同学,立志用更简洁的代码做更高效的表达 给你两个 没有重复元素 的数组 nums1 和 nums2 ,其中nums1 是 nums2 的子集. 请你找出 nums1 中每个元素在 nums2 ...
- LeetCode 496. 下一个更大元素 I(哈希)
1. 题目 给定两个没有重复元素的数组 nums1 和 nums2 ,其中nums1 是 nums2 的子集.找到 nums1 中每个元素在 nums2 中的下一个比其大的值. nums1 中数字 x ...
- 496. 下一个更大元素 I/503. 下一个更大元素 II/739. 每日温度
2020-05-10 1.题目描述 下一个更大元素 2.题解 1.直接进行暴力搜索 2.既然题目的标签是栈,就应该用到栈先进后出的特性,参考了官方的题解之后,我认为最能体现这种 特性的就是要找到下一个 ...
- 【LeetCode】496. 下一个更大元素 I 【单调栈】
题目链接:https://leetcode-cn.com/problems/next-greater-element-i/ 题目描述 给你两个 没有重复元素 的数组 nums1 和 nums2 ,其中 ...
- leetcode 496. 下一个更大元素 I(Java版,单调栈解法)
题目 https://leetcode-cn.com/problems/next-greater-element-i/ 题解 通过Stack.HashMap解决,经典的单调栈问题 先遍历大数组nums ...
最新文章
- sharepoint 2013 自定义列表eventhandle权限控制
- 强连通分量(Strongly_Connected_Components)
- 在银行存100万,如果银行倒闭,超过50万部分是不是拿不回来?
- 这是不是帮女朋友拍照时的你?哈哈哈哈
- java 切换panel会闪烁_【19期】为什么Java线程没有Running状态?
- python十个运维实战项目_干货 | 这4个Python实战项目,让你瞬间读懂Python!
- 武汉大学计算机系学哪些专业,武汉大学最好的专业是什么(10大热门专业排名)...
- (转)Android IPC机制详解
- (14)Node.js 核心模块—http
- [再学Python] - 2 - math库和random库
- python从入门学习笔记
- 在c语言中用switch编写月份,用switch语句从键盘输入一个月份,自动显示该月份的英文名称!C语言的...
- 劫持流量原理是什么?关于劫持流量的种类和产生
- 产品经理究竟是干嘛的
- ByteBuff常用方法,使用
- 解决listview 超出界面问题
- 计算机软件与微电子专业,系专业跟年级_ 计算机软件跟微电子专业98级.doc
- ios epub电子书阅读器demo
- html网页设计代码作业——家乡介绍-长治(8页) HTML+CSS+JavaScript 学生DW网页设计作业成品 html网页制作期末大作业成品_网页设计期末作业
- 交互设计是什么:一篇文章推开交互设计的大门
热门文章
- python循环语句打印矩形_Python中使用循环语句打印三角形、菱形
- rust(20)-字符
- 速学c++(1)-c++简介
- AtCoder Beginner Contest 215 F - Dist Max 2
- 【论文解读】CVPR 2021 当之无愧的最佳论文奖:GIRAFFE,一种可控图像合成方法...
- 【NLP】文本生成?还不快上知识库
- 再降64%,3.5M超轻量中英文OCR模型开源,身量缩减效果提升v4.1
- 【面向工业界】京东NLP落地应用实战
- 【NLP】BERT大魔王为何在商业环境下碰壁?
- Kaggle | Bengali 比赛总结(孟加拉字符分类 )