解题思路:

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

如果使用暴力的方法:对nums1中的每个int,在nums2中去找下一个更大元素,时间复杂度将会是O(num1.size() * nums2.size()),太过暴力。

使用一个unordered_map和一个stack进行处理的方法如下:

  • 大循环遍历vector nums2;
  • 当栈不为空且栈顶元素小于nums2当前元素时,说明找到了栈顶元素的下一个更大元素,将其记录在unordered_map中;
  • 如果栈为空,或者栈顶元素仍大于当前的nums2元素,则将当前的nums2元素入栈。

循环下来之后,nums2中的一些元素可能会没有相应的下一个更大元素,留在了栈中,但我们不管这个了,不用再将其对应-1存进unordered_map中(为了省空间)。而且,最终结果可以直接在nums1中进行更新(省空间)。

class Solution {
public:vector<int> nextGreaterElement(vector<int>& nums1, vector<int>& nums2) {unordered_map<int, int> a;stack<int> b;//遍历nums2for(auto x: nums2){while(!b.empty() && b.top() < x){a[b.top()] = x;b.pop();}b.push(x);}//将结果直接在nums1中进行更新for(int i = 0; i < nums1.size(); i++){if(a.count(nums1[i]))  //利用count函数来看看unordered_map中是否有这个key,有的话返回1,无 则返回0nums1[i] = (a[nums1[i]]);else nums1[i] = -1;}return nums1;}
};

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

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

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

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

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

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

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

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

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

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

    496. 下一个更大元素 I 题目 分析 我的解答 官方解答 题目 给定两个 没有重复元素 的数组 nums1 和 nums2 ,其中nums1 是 nums2 的子集.找到 nums1 中每个元素在 ...

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

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

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

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

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

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

  9. leetcode 503. 下一个更大元素 II(单调栈)

    给定一个循环数组(最后一个元素的下一个元素是数组的第一个元素),输出每个元素的下一个更大元素.数字 x 的下一个更大的元素是按数组遍历顺序,这个数字之后的第一个比它更大的数,这意味着你应该循环地搜索它 ...

最新文章

  1. 怎样的架构设计能力,才能成功拿下阿里P7?
  2. sublime搭建C/C++编译环境(超完美的配置并配上内容详细讲解!!)
  3. Alibaba Cloud Linux 技术图谱首发,分享学习感言得大奖!
  4. 第八讲:tapestry组件
  5. ASP.NET Core中借助CSRedis实现安全高效的分布式锁
  6. win10系统能做域服务器吗,Win10 LTSC 加入 Windows Server 2019 域服务器
  7. 【C语言】请输入一个n(n=10)并输出一个n行n列的杨辉三角
  8. 简述中断处理的6个步骤_基于SCDM软件的CFD前处理工作5个步骤
  9. office文档 在线预览 (doc、ppt、xls)
  10. 怎么加密高程点_珠峰咋有4个高度?专业测绘科技工作者解读珠峰高程测算过程...
  11. cad字体安装_CAD字体安装方法
  12. openssl版本升级
  13. 隔离变压器不触电原因
  14. 进阶篇:2)DFMA方法的运用
  15. Python—遇到的问题,使用PyPDF2转化pdf时候遇到的各种问题。
  16. 【JavaScript速成之路】JavaScript数据类型转换
  17. 几种常见的开发语言对比
  18. Mac苹果电脑如何输入表情符号?
  19. 语音助手APP测试点
  20. [渝粤教育] 西南科技大学 建筑经济与企业管理 在线考试复习资料

热门文章

  1. C语言时间管理小程序,写了一个时间管理的微信小程序
  2. c++求矩阵的秩_一篇文章搞定矩阵相关概念及意义通俗解释汇总
  3. 著名站点的爬虫 —— 豆瓣
  4. 认识HTML5的WebSocket
  5. Codeforces Round #297 (Div. 2)D. Arthur and Walls 搜索bfs
  6. Spring MVC重定向和转发及异常处理
  7. Linear Algebra lecture6 note
  8. 【Android Developers Training】 93. 创建一个空验证器
  9. 【Android 界面效果9】9patch图片
  10. ros创建功能包和编译过程问题处理