LINTCODE:496 下一个最大元素I(Python语言实现)

题目描述

给定两个没有重复元素的数组nums1和nums2,其中nums1是nums2的子集。找到nums1中每个元素在nums2中的下一个比其大的值。

nums1中数字x的下一个更大元素是指x在nums2中对应位置的右边的第一个比x大的元素。如果不存在,对应位置输出-1。

  • 示例1

    • 输入
    nums1 = [4, 1, 2], nums2 = [1, 3, 4, 2]
    
    • 输出
    [-1, 3, -1]
    
    • 解释
    对于nums1中的数字4,你无法在第二个数组中找到下一个更大的数字,因此输出-1。
    对于nums1中的数字1,第二个数组中数字1右边的下一个较大数字是3。
    对于nums1中的数字2,第二个数组中没有下一个更大的数字,因此输出-1。
    
  • 示例2

    • 输入
    nums1 = [2, 4], nums2 = [1, 2, 3, 4]
    
    • 输出
    [3, -1]
    
    • 解释
    对于nums1中的数字2,第二个数组中下一个较大数字是3。
    对于nums1中的数字4,第二个数组中没有下一个更大的数字,因此输出-1。
    
  • 注意

1. nums1和nums2中所有元素是唯一的。
2. nums1和nums2的数组大小都不超过1000。

循环遍历寻找

索引当前列表nums1中元素在列表nums2中的下标值,遍历寻找下一个比其大的数字,没有则默认为-1。

def nextGreaterElement(self, nums1, nums2):
    """
    :type nums1: List[int]
    :type nums2: List[int]
    :rtype: List[int]
    """
    res = [-1] * len(nums1)
    for ni in range(len(nums1)):
        current = nums1[ni]
        idx = nums2.index(current)
        for nj in range(idx, len(nums2)):
            if nums2[nj] > current:
                res[ni] = nums2[nj]
                break
    return res

利用栈结构优化构建字典

根据列表nums2利用栈的FILO特性,计算出当前元素在此列表nums2中下一个较大的数字存储在字典中。

def nextGreaterElement(self, nums1, nums2):
    """
    :type nums1: List[int]
    :type nums2: List[int]
    :rtype: List[int]
    """
    next_value_dict, current_stack = {}, []
    for nu in nums2:
        while current_stack and current_stack[-1] < nu:
            next_value_dict[current_stack.pop()] = nu
        current_stack.append(nu)
    return [next_value_dict.get(num, -1) for num in nums1]

(最近更新:2019年06月17日)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值