Leecode 0496. 下一个更大元素 I
496. 下一个更大元素 I
nums1
中数字 x
的 下一个更大元素 是指 x
在 nums2
中对应位置 右侧 的 第一个 比 x
大的元素。
给你两个 没有重复元素 的数组 nums1
和 nums2
,下标从 0 开始计数,其中nums1
是 nums2
的子集。
对于每个 0 <= i < nums1.length
,找出满足 nums1[i] == nums2[j]
的下标 j
,并且在 nums2
确定 nums2[j]
的 下一个更大元素 。如果不存在下一个更大元素,那么本次查询的答案是 -1
。
返回一个长度为 nums1.length
的数组 ans
作为答案,满足 ans[i]
是如上所述的 下一个更大元素 。
示例 1:
1 | 输入:nums1 = [4,1,2], nums2 = [1,3,4,2]. |
示例 2:
1 | 输入:nums1 = [2,4], nums2 = [1,2,3,4]. |
解题思路
核心思路是单调栈 + 哈希表,通过单调栈预处理 nums2
以快速查询每个元素的下一个更大元素,再结合哈希表实现 O (1) 时间复杂度的查询:
- 单调栈预处理
nums2
:- 遍历
nums2
,使用单调栈维护一个递减序列; - 对于每个元素
num
,当栈不为空且栈顶元素小于num
时,说明num
是栈顶元素的下一个更大元素,记录到哈希表中并弹出栈顶; - 将当前元素
num
压入栈,继续遍历。
- 遍历
- 构建结果数组:
- 遍历
nums1
,对于每个元素x
,从哈希表中查询其下一个更大元素(若不存在则为-1
),存入结果数组。
- 遍历
代码实现
1 | class Solution { |
All articles on this blog are licensed under CC BY-NC-SA 4.0 unless otherwise stated.