当前位置: 首页 > news >正文

02 下一个更大元素 单调栈

496. 下一个更大元素 I

已解答

简单

相关标签

premium lock icon相关企业

nums1 中数字 x下一个更大元素 是指 xnums2 中对应位置 右侧第一个x 大的元素。

给你两个 没有重复元素 的数组 nums1nums2 ,下标从 0 开始计数,其中nums1nums2 的子集。

对于每个 0 <= i < nums1.length ,找出满足 nums1[i] == nums2[j] 的下标 j ,并且在 nums2 确定 nums2[j]下一个更大元素 。如果不存在下一个更大元素,那么本次查询的答案是 -1

返回一个长度为 nums1.length 的数组 ans 作为答案,满足 ans[i] 是如上所述的 下一个更大元素

示例 1:

输入:nums1 = [4,1,2], nums2 = [1,3,4,2].
输出:[-1,3,-1]
解释:nums1 中每个值的下一个更大元素如下所述:
- 4 ,用加粗斜体标识,nums2 = [1,3,4,2]。不存在下一个更大元素,所以答案是 -1 。
- 1 ,用加粗斜体标识,nums2 = [1,3,4,2]。下一个更大元素是 3 。
- 2 ,用加粗斜体标识,nums2 = [1,3,4,2]。不存在下一个更大元素,所以答案是 -1 。

示例 2:

输入:nums1 = [2,4], nums2 = [1,2,3,4].
输出:[3,-1]
解释:nums1 中每个值的下一个更大元素如下所述:
- 2 ,用加粗斜体标识,nums2 = [1,2,3,4]。下一个更大元素是 3 。
- 4 ,用加粗斜体标识,nums2 = [1,2,3,4]。不存在下一个更大元素,所以答案是 -1 。

提示:

  • 1 <= nums1.length <= nums2.length <= 1000
  • 0 <= nums1[i], nums2[i] <= 104
  • nums1nums2中所有整数 互不相同
  • nums1 中的所有整数同样出现在 nums2

进阶:你可以设计一个时间复杂度为 O(nums1.length + nums2.length) 的解决方案吗?


class Solution {
public:vector<int> nextGreaterElement(vector<int>& nums1, vector<int>& nums2) {stack<int> st;vector<int> result(nums1.size(), -1);if (nums1.size() == 0) return result;unordered_map<int, int> umap; // key:下标元素,value:下标for (int i = 0; i < nums1.size(); i++) {umap[nums1[i]] = i;}st.push(0);for (int i = 1; i < nums2.size(); i++) {if (nums2[i] < nums2[st.top()]) {           // 情况一st.push(i);} else if (nums2[i] == nums2[st.top()]) {   // 情况二st.push(i);} else {                                    // 情况三while (!st.empty() && nums2[i] > nums2[st.top()]) {if (umap.count(nums2[st.top()]) > 0) { // 看map里是否存在这个元素int index = umap[nums2[st.top()]]; // 根据map找到nums2[st.top()] 在 nums1中的下标result[index] = nums2[i];}st.pop();}st.push(i);}}return result;}
};
  • 总体思路和上一题差别不大

    区别就是本题是两个数组,需要通过map映射

    思路:先用map记录一下nums1中的元素以及他们对应的下标(题目中已经明确一个数组中没有重复的元素)(key存数值,value存下标),方便到时候判断某元素是否在nums1中存在,下标是多少

    遍历nums2数组,用栈记录遍历过的元素,每当当前元素小于等于栈顶元素时,将当前元素加入到栈中(下标),当大于栈顶元素时,先看nums1中是否存在这个元素(通过map查看),若不存在直接弹出当前元素就可以了,若存在,根据map找到当前元素在nums1数组中的下标,加入结果集

http://www.jsqmd.com/news/739127/

相关文章:

  • MTKClient终极指南:联发科设备刷机救砖的完整解决方案
  • 如何安装Competitive Companion:编程竞赛选手的终极效率工具指南
  • 从Excel表格到交互式仪表盘:Power BI Desktop 2024版完整数据清洗与建模避坑指南
  • 世界动作模型(WAM)的泛化能力是否优于视觉语言动作模型(VLA)?
  • Flyte:云原生AI工作流引擎,从ML实验到生产部署的实践指南
  • 压力传感器哪个品牌靠谱?2026行业标杆认准广东犸力 - 速递信息
  • 八大网盘直链解析技术深度解析:架构设计与性能优化指南
  • 设备突发停机损失高达23万/小时?用Python搭建实时故障概率看板,3天上线,ROI测算模板免费送
  • 高二下期中考试总结
  • 在自动化工作流中集成 Taotoken 实现大模型能力的按需调用
  • 离散扩散模型高效采样:Floyd算法与Softmax近似技术
  • OpenCode桌面版配置Deepseek v4教程
  • B站m4s视频转换终极指南:3分钟实现无损格式转换的完整方案
  • 压力传感器行业排名哪家好?2026值得信赖选广东犸力 - 速递信息
  • CodeMaker深度实战指南:企业级Java/Scala代码自动化生成架构解析
  • 使用 Hermes Agent 时如何配置 Taotoken 作为自定义供应商
  • 短视频去水印工具推荐:免费去水印方法大全,2026实测哪些真的好用? - 科技热点发布
  • Markdown Viewer:让浏览器成为你的专业文档阅读器
  • League Akari:英雄联盟玩家的智能本地助手
  • 终极指南:如何快速掌握暗黑2存档编辑,打造完美角色体验
  • Zotero茉莉花插件:3步搞定中文文献管理,科研效率提升90%
  • 文章1:《2026年新能源驱动电机真空灌胶机厂家推荐指南:十大主流品牌技术对比》___## 导读4-27 - 自动化老兵
  • 通过 curl 命令直接测试 Taotoken 聊天补全接口的配置与排错方法
  • 抖音视频怎么保存到本地去水印?2026抖音去水印最新方法实测,这几招简单又好用 - 科技热点发布
  • AntiMicroX终极指南:如何用手柄玩转所有PC游戏
  • 别再傻傻分不清了!Qt中QString的indexOf()和find()到底有啥区别?
  • DDrawCompat技术解析:Windows系统下DirectX 1-7兼容层实现方案
  • PySpice终极指南:如何用Python轻松完成专业级电路仿真
  • Auto.js悬浮按钮UI模板详解:从代码注释到实战避坑,新手也能5分钟上手
  • 多会话协作系统中的用户偏好模拟技术解析