给定两个没有重复元素的数组 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相关推荐

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

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

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

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

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

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

  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. php 中memcache的应用场景,php当中的memcache应用
  2. vue + element 顶部二级菜单_揭秘vue/react组件库中5个quot;作者不造的轮子quot;
  3. vc udp 广播接收和发送_UDP编程与DatagramSocket类:UDP的套接字
  4. 白盒-CNN纹理深度可视化: 使用MIT Place 场景预训练模型
  5. 关于“服务器提交了协议冲突. Section=ResponseStatusLine问题
  6. 三菱驱动器参数表_三菱 M 参数表
  7. 客户成功案例 | 台湾杜邦:提升制程能力的法宝 — 先进的数据分析
  8. SPSS Clementine 安装教程
  9. python3GUI--在线小说播放器By:PyQt5(附ui源码)
  10. 形式语言与自动机 第五章 课后题答案
  11. 重装windows10系统的教程
  12. Easyrecovery激活码生成器分享
  13. 苹果摄像头黑屏_品牌借势:苹果12发布会,王守义十三香领衔,杜蕾斯再出手...
  14. 寻找丢失的LZY(dfs)
  15. 74LSxx versus. 74HCxx
  16. 软考__BS家族_WBS_OBS_RBS
  17. 这次的深夜食堂来到了清迈,只为寻找那些…
  18. 一键爬取王者荣耀全皮肤高清图片【方法一】
  19. CSS实现汉字与数字底部对齐
  20. mouseover和mouseenter的异同

热门文章

  1. 人脸识别:insightface自定义数据集制作 | 附练手数据集
  2. 除法取模(比赛常用)
  3. CPU状态信息us,sy,ni,id,wa,hi,si,st含义
  4. 查找谁在使用文件系统
  5. 大流量网站的底层系统架构
  6. myeclipse.ini内存参数设置及其含义
  7. 不仅是 64 位 Android L 还有这 9 大亮点
  8. android平台水波效果 源码
  9. 【收藏】推荐系列:2008年第08期 总10期
  10. python第一周小测验_Python小测试