2.单调栈-下一个更大元素.py

文章描述了一个编程问题,要求在给定的两个无重复元素数组nums1和nums2中,找到nums1中每个元素在nums2中的对应位置右侧的第一个大于该元素的值的索引,若不存在则返回-1。给出示例和代码实现过程。
摘要由CSDN通过智能技术生成
# # 套上一个壳子就有点绕了| 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)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值