一. 题目
-
题目
-
示例
二. 方法一: 单调栈 + map
-
解题思路
- 用单调栈查找nums2中每个元素右侧比他大的第一个元素
- 再用map存储nums2中当前元素和他下一个元素的值
- 再遍历nums1中的元素:判断是否在map中,:
若在, 则返回其对应的value
若不在, 则返回-1
-
解题代码
def nextGreaterElement(self, nums1: List[int], nums2: List[int]) -> List[int]: stack = [] map1 = {} result = [] for index in range(len(nums2)): while stack and nums2[index] > nums2[stack[-1]]: map1[nums2[stack[-1]]] = nums2[index] stack.pop() stack.append(index) for ele in nums1: if ele in map1.keys(): result.append(map1[ele]) else: result.append(-1) return result
-
分析
时间复杂度: O(n + m) 其中n为nums2中元素的数量, m为nums1中元素的数量
空间复杂度: O(n)
三. 方法二
-
解题思路
-
解题代码
-
分析