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)
思路跟之前做过的柱形图中最大的面积差不多。
- 1
遍历nums2的元素 i,找到 i 右边第一个比他大的元素,把下标保存。
.如果nums2【i+1】>nums2【i】,那么问题转化为找出第i+1个了。
class Solution {public:vector<int> nextGreaterElement(vector<int>& nums1, vector<int>& nums2){vector<int>ans;if(nums2.empty()) return ans;int size=nums2.size();int right_max[size+1];right_max[size-1]=-1;map<int,int>mapp;mapp[nums2[size-1]]=-1;for(int i=size-2; i>=0; i--){int tep=i+1;while(tep>0&&nums2[tep]<nums2[i]){tep=right_max[tep];}right_max[i]=tep;if(tep>0) mapp[nums2[i]]=nums2[tep];else mapp[nums2[i]]=-1;}for(auto a:nums1){ans.push_back(mapp[a]);}return ans;}
};
- 2单调栈
维护一个单调递减的栈。当新元素大于栈顶时,出栈;直到栈为空或者新元素不大于栈顶时,入栈新元素。
class Solution {public:vector<int> nextGreaterElement(vector<int>& nums1, vector<int>& nums2) {stack<int>st;int size=nums2.size();unordered_map<int,int>mapp;for(int i=0;i<size;i++){while(!st.empty()&&nums2[i]>st.top()){mapp[st.top()]=nums2[i];st.pop();}st.push(nums2[i]);}while(!st.empty()){mapp[st.top()]=-1;st.pop();}vector<int>ans;for(auto a:nums1)ans.push_back(mapp[a]);return ans;}
};
496.下一个更大元素I相关推荐
- 496. 下一个更大元素 I
496. 下一个更大元素 I 题目 分析 我的解答 官方解答 题目 给定两个 没有重复元素 的数组 nums1 和 nums2 ,其中nums1 是 nums2 的子集.找到 nums1 中每个元素在 ...
- LeetCode 496. 下一个更大元素 I
599. 两个列表的最小索引总和 添加链接描述 假设 Andy 和 Doris 想在晚餐时选择一家餐厅,并且他们都有一个表示最喜爱餐厅的列表,每个餐厅的名字用字符串表示. 你需要帮助他们用最少的索引和 ...
- Java实现 LeetCode 496 下一个更大元素 I
496. 下一个更大元素 I 给定两个没有重复元素的数组 nums1 和 nums2 ,其中nums1 是 nums2 的子集.找到 nums1 中每个元素在 nums2 中的下一个比其大的值. nu ...
- 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 ...
最新文章
- php 中memcache的应用场景,php当中的memcache应用
- vue + element 顶部二级菜单_揭秘vue/react组件库中5个quot;作者不造的轮子quot;
- vc udp 广播接收和发送_UDP编程与DatagramSocket类:UDP的套接字
- 白盒-CNN纹理深度可视化: 使用MIT Place 场景预训练模型
- 关于“服务器提交了协议冲突. Section=ResponseStatusLine问题
- 三菱驱动器参数表_三菱 M 参数表
- 客户成功案例 | 台湾杜邦:提升制程能力的法宝 — 先进的数据分析
- SPSS Clementine 安装教程
- python3GUI--在线小说播放器By:PyQt5(附ui源码)
- 形式语言与自动机 第五章 课后题答案
- 重装windows10系统的教程
- Easyrecovery激活码生成器分享
- 苹果摄像头黑屏_品牌借势:苹果12发布会,王守义十三香领衔,杜蕾斯再出手...
- 寻找丢失的LZY(dfs)
- 74LSxx versus. 74HCxx
- 软考__BS家族_WBS_OBS_RBS
- 这次的深夜食堂来到了清迈,只为寻找那些…
- 一键爬取王者荣耀全皮肤高清图片【方法一】
- CSS实现汉字与数字底部对齐
- mouseover和mouseenter的异同