# # 套上一个壳子就有点绕了| LeetCode:496. # # 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: # 输入: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 。 # nums1 = [2, 4] # nums2 = [1, 2, 3, 4] nums1 = [4, 1, 2] nums2 = [1, 3, 4, 2] map_dict = {} for i in range(len(nums2)): if nums2[i] in nums1: map_dict[nums2[i]] = nums1.index(nums2[i]) print(map_dict) vstack = [0] res = [-1]*len(nums1) for j in range(1, len(nums2)): if nums2[j] <= nums2[vstack[-1]]: vstack.append(j) else: while vstack and nums2[j] > nums2[vstack[-1]]: if nums2[vstack[-1]] in map_dict.keys(): index = map_dict[nums2[vstack[-1]]] res[index] = nums2[j] vstack.pop() vstack.append(j) print(res)
2.单调栈-下一个更大元素.py
文章描述了一个编程问题,要求在给定的两个无重复元素数组nums1和nums2中,找到nums1中每个元素在nums2中的对应位置右侧的第一个大于该元素的值的索引,若不存在则返回-1。给出示例和代码实现过程。
摘要由CSDN通过智能技术生成