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
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

分析

  1. 将nums2是无重复元素的数组,新建一个字典dic,key是nums2中的元素,value是相应元素的位置。
  2. 新建保存结果的空列表result
  3. 遍历变量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中的元素,字典中保存下一个比当前值大的值

  1. 新建空栈stack,字典dic
  2. 遍历nums2中的元素–item
    如果栈为空或者当前元素小于栈顶值,将item压入栈
    否则弹出栈顶值作为keydic[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)

翻译一下

  1. 当stack不为空且栈顶值<item时,需要弹出顶值最为key,item为value,直到栈为空或栈顶值>item.
  2. 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相关推荐

  1. LeetCode 496. 下一个更大元素 I

    599. 两个列表的最小索引总和 添加链接描述 假设 Andy 和 Doris 想在晚餐时选择一家餐厅,并且他们都有一个表示最喜爱餐厅的列表,每个餐厅的名字用字符串表示. 你需要帮助他们用最少的索引和 ...

  2. Java实现 LeetCode 496 下一个更大元素 I

    496. 下一个更大元素 I 给定两个没有重复元素的数组 nums1 和 nums2 ,其中nums1 是 nums2 的子集.找到 nums1 中每个元素在 nums2 中的下一个比其大的值. nu ...

  3. 496.下一个更大元素I

    给定两个没有重复元素的数组 nums1 和 nums2 ,其中nums1 是 nums2 的子集.找到 nums1 中每个元素在 nums2 中的下一个比其大的值. nums1 中数字 x 的下一个更 ...

  4. LeetCode 496. 下一个更大元素 I 解题思路及C++实现

    解题思路: 因为这两个int型的vector中不包含重复元素,所以考虑使用c++中的unordered_map,对num2进行遍历,找到每一个元素的下一个更大元素,这样的话,时间复杂度就是O(n). ...

  5. Leecode 496. 下一个更大元素 I——Leecode每日一题系列

    我是小张同学,立志用更简洁的代码做更高效的表达 给你两个 没有重复元素 的数组 nums1 和 nums2 ,其中nums1 是 nums2 的子集. 请你找出 nums1 中每个元素在 nums2 ...

  6. LeetCode 496. 下一个更大元素 I(哈希)

    1. 题目 给定两个没有重复元素的数组 nums1 和 nums2 ,其中nums1 是 nums2 的子集.找到 nums1 中每个元素在 nums2 中的下一个比其大的值. nums1 中数字 x ...

  7. 496. 下一个更大元素 I/503. 下一个更大元素 II/739. 每日温度

    2020-05-10 1.题目描述 下一个更大元素 2.题解 1.直接进行暴力搜索 2.既然题目的标签是栈,就应该用到栈先进后出的特性,参考了官方的题解之后,我认为最能体现这种 特性的就是要找到下一个 ...

  8. 【LeetCode】496. 下一个更大元素 I 【单调栈】

    题目链接:https://leetcode-cn.com/problems/next-greater-element-i/ 题目描述 给你两个 没有重复元素 的数组 nums1 和 nums2 ,其中 ...

  9. leetcode 496. 下一个更大元素 I(Java版,单调栈解法)

    题目 https://leetcode-cn.com/problems/next-greater-element-i/ 题解 通过Stack.HashMap解决,经典的单调栈问题 先遍历大数组nums ...

最新文章

  1. sharepoint 2013 自定义列表eventhandle权限控制
  2. 强连通分量(Strongly_Connected_Components)
  3. 在银行存100万,如果银行倒闭,超过50万部分是不是拿不回来?
  4. 这是不是帮女朋友拍照时的你?哈哈哈哈
  5. java 切换panel会闪烁_【19期】为什么Java线程没有Running状态?
  6. python十个运维实战项目_干货 | 这4个Python实战项目,让你瞬间读懂Python!
  7. 武汉大学计算机系学哪些专业,武汉大学最好的专业是什么(10大热门专业排名)...
  8. (转)Android IPC机制详解
  9. (14)Node.js 核心模块—http
  10. [再学Python] - 2 - math库和random库
  11. python从入门学习笔记
  12. 在c语言中用switch编写月份,用switch语句从键盘输入一个月份,自动显示该月份的英文名称!C语言的...
  13. 劫持流量原理是什么?关于劫持流量的种类和产生
  14. 产品经理究竟是干嘛的
  15. ByteBuff常用方法,使用
  16. 解决listview 超出界面问题
  17. 计算机软件与微电子专业,系专业跟年级_ 计算机软件跟微电子专业98级.doc
  18. ios epub电子书阅读器demo
  19. html网页设计代码作业——家乡介绍-长治(8页) HTML+CSS+JavaScript 学生DW网页设计作业成品 html网页制作期末大作业成品_网页设计期末作业
  20. 交互设计是什么:一篇文章推开交互设计的大门

热门文章

  1. python循环语句打印矩形_Python中使用循环语句打印三角形、菱形
  2. rust(20)-字符
  3. 速学c++(1)-c++简介
  4. AtCoder Beginner Contest 215 F - Dist Max 2
  5. 【论文解读】CVPR 2021 当之无愧的最佳论文奖:GIRAFFE,一种可控图像合成方法...
  6. 【NLP】文本生成?还不快上知识库
  7. 再降64%,3.5M超轻量中英文OCR模型开源,身量缩减效果提升v4.1
  8. 【面向工业界】京东NLP落地应用实战
  9. 【NLP】BERT大魔王为何在商业环境下碰壁?
  10. Kaggle | Bengali 比赛总结(孟加拉字符分类 )