LeetCode 496. 下一个更大元素 I 解题思路及C++实现
解题思路:
因为这两个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++实现相关推荐
- LeetCode 496. 下一个更大元素 I
599. 两个列表的最小索引总和 添加链接描述 假设 Andy 和 Doris 想在晚餐时选择一家餐厅,并且他们都有一个表示最喜爱餐厅的列表,每个餐厅的名字用字符串表示. 你需要帮助他们用最少的索引和 ...
- Java实现 LeetCode 496 下一个更大元素 I
496. 下一个更大元素 I 给定两个没有重复元素的数组 nums1 和 nums2 ,其中nums1 是 nums2 的子集.找到 nums1 中每个元素在 nums2 中的下一个比其大的值. nu ...
- LeetCode 496. 下一个更大元素 I(哈希)
1. 题目 给定两个没有重复元素的数组 nums1 和 nums2 ,其中nums1 是 nums2 的子集.找到 nums1 中每个元素在 nums2 中的下一个比其大的值. nums1 中数字 x ...
- leetcode 496. 下一个更大元素 I(Java版,单调栈解法)
题目 https://leetcode-cn.com/problems/next-greater-element-i/ 题解 通过Stack.HashMap解决,经典的单调栈问题 先遍历大数组nums ...
- 496. 下一个更大元素 I
496. 下一个更大元素 I 题目 分析 我的解答 官方解答 题目 给定两个 没有重复元素 的数组 nums1 和 nums2 ,其中nums1 是 nums2 的子集.找到 nums1 中每个元素在 ...
- 【LeetCode】496. 下一个更大元素 I 【单调栈】
题目链接:https://leetcode-cn.com/problems/next-greater-element-i/ 题目描述 给你两个 没有重复元素 的数组 nums1 和 nums2 ,其中 ...
- 496.下一个更大元素I
给定两个没有重复元素的数组 nums1 和 nums2 ,其中nums1 是 nums2 的子集.找到 nums1 中每个元素在 nums2 中的下一个比其大的值. nums1 中数字 x 的下一个更 ...
- Leecode 496. 下一个更大元素 I——Leecode每日一题系列
我是小张同学,立志用更简洁的代码做更高效的表达 给你两个 没有重复元素 的数组 nums1 和 nums2 ,其中nums1 是 nums2 的子集. 请你找出 nums1 中每个元素在 nums2 ...
- leetcode 503. 下一个更大元素 II(单调栈)
给定一个循环数组(最后一个元素的下一个元素是数组的第一个元素),输出每个元素的下一个更大元素.数字 x 的下一个更大的元素是按数组遍历顺序,这个数字之后的第一个比它更大的数,这意味着你应该循环地搜索它 ...
最新文章
- 怎样的架构设计能力,才能成功拿下阿里P7?
- sublime搭建C/C++编译环境(超完美的配置并配上内容详细讲解!!)
- Alibaba Cloud Linux 技术图谱首发,分享学习感言得大奖!
- 第八讲:tapestry组件
- ASP.NET Core中借助CSRedis实现安全高效的分布式锁
- win10系统能做域服务器吗,Win10 LTSC 加入 Windows Server 2019 域服务器
- 【C语言】请输入一个n(n=10)并输出一个n行n列的杨辉三角
- 简述中断处理的6个步骤_基于SCDM软件的CFD前处理工作5个步骤
- office文档 在线预览 (doc、ppt、xls)
- 怎么加密高程点_珠峰咋有4个高度?专业测绘科技工作者解读珠峰高程测算过程...
- cad字体安装_CAD字体安装方法
- openssl版本升级
- 隔离变压器不触电原因
- 进阶篇:2)DFMA方法的运用
- Python—遇到的问题,使用PyPDF2转化pdf时候遇到的各种问题。
- 【JavaScript速成之路】JavaScript数据类型转换
- 几种常见的开发语言对比
- Mac苹果电脑如何输入表情符号?
- 语音助手APP测试点
- [渝粤教育] 西南科技大学 建筑经济与企业管理 在线考试复习资料
热门文章
- C语言时间管理小程序,写了一个时间管理的微信小程序
- c++求矩阵的秩_一篇文章搞定矩阵相关概念及意义通俗解释汇总
- 著名站点的爬虫 —— 豆瓣
- 认识HTML5的WebSocket
- Codeforces Round #297 (Div. 2)D. Arthur and Walls 搜索bfs
- Spring MVC重定向和转发及异常处理
- Linear Algebra lecture6 note
- 【Android Developers Training】 93. 创建一个空验证器
- 【Android 界面效果9】9patch图片
- ros创建功能包和编译过程问题处理