力扣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:

输入:nums1 = [4,1,2], nums2 = [1,3,4,2].
输出:[-1,3,-1]

分析与代码实现
class Solution(object):
    def nextGreaterElement(self, nums1, nums2):
        """
        :type nums1: List[int]
        :type nums2: List[int]
        :rtype: List[int]
        """
        # 方法一:暴力 时间复杂度0(mn)
        # l=[]
        # for i in nums1:
        #     tmp=-1
        #     maxItem=-1
        #     for index,value in enumerate(nums2):
        #         if tmp!=-1:
        #             if value>tmp:
        #                 maxItem=value
        #                 break
        #         elif value==i:
        #             tmp=i
        #             continue
        #     l.append(maxItem)
        # return l

        # 进阶:你可以设计一个时间复杂度为 O(nums1.length + nums2.length) 的解决方案吗?
        # 暴力法的时间复杂度大,是因为我们需要为nums1中每个元素 遍历nums2找到对应位置然后继续遍历确定下一个最大元素
        # 可不可以不遍历nums2,直接访问哈希表key就是nums2中的每个元素值,value就是key对应的nums2中的下一个最大元素呢
        # 如何弄出这个哈希表的key-value???利用单调栈
        stack=list()
        d=dict()
        l=[]
        for i in range(len(nums2)-1,-1,-1):
            while len(stack)>0 and stack[-1]<nums2[i]:
                stack.pop(-1)
            if len(stack)>0:
                d[nums2[i]]=stack[-1]
            else:
                d[nums2[i]]=-1
            stack.append(nums2[i])
        for i in nums1:
            # 是子集
            l.append(d[i])
        return l
                
            

  • 8
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值