每日一题 【每日一题】下一个更大的数 -Python-20211003

Jack · 2021年10月03日 · 最后由 lework 回复于 2022年01月18日 · 71 次阅读
本帖已被设为精华帖!
  1. 问题描述: 两个不重复的数组,nums1 和 nums2,其中 nums1 是 nums2 的子集。在 nums2 的相应位置找到 nums 所有元素的下一个更大的数字。若不存在,则输出-1 nums1 和 nums2 中所有数字都是唯一的,且长度不超过 1000
  2. 问题示例: 输入: nums1 = [4, 1, 2] nums2 = [1, 3, 4, 2] 输出: [-1, 3, -1] 注: 对于 nums1 中的 4,在 nums2 中没有找到更大的数字,所以返回-1;其余数字一次类推
Jack 将本帖设为了精华贴 10月03日 16:56

参考代码:

class Solution:
    def nextGreaterElement(self, nums1, nums2):
        answer = {}
        stack = []
        for x in nums2:
            while stack and stack[-1] < x:
                answer[stack[-1]] = x
                del stack[-1]
            stack.append(x)
        for x in stack:
            answer[x] = -1
        return [answer[x] for x in nums1]
package main

import "fmt"

func nextGreaterElement(nums1 []int, nums2 []int) []int {
    var (
        m     = make(map[int]int)
        stack []int
    )

    for _, v := range nums2 {
        if len(stack) != 0 && v > stack[len(stack)-1] {
            m[stack[len(stack)-1]] = v
            stack = stack[:len(stack)-1]
        }
        stack = append(stack, v)
    }

    for len(stack) != 0 {
        m[stack[len(stack)-1]] = -1
        stack = stack[:len(stack)-1]
    }

    for k, v := range nums1 {
        nums1[k] = m[v]
    }

    return nums1
}

func main() {
    /*
        下一个更大的数
        问题描述: 两个不重复的数组,nums1 和 nums2,其中 nums1 是 nums2 的子集。在 nums2 的相应位置找到 nums 所有元素的下一个更大的数字。若不存在,则输出-1 nums1 和 nums2 中所有数字都是唯一的,且长度不超过 1000
        问题示例: 输入: nums1 = [4, 1, 2] nums2 = [1, 3, 4, 2] 输出: [-1, 3, -1] 注: 对于 nums1 中的 4,在 nums2 中没有找到更大的数字,所以返回-1;其余数字一次类推
    */
    nums1 := []int{4, 1, 2}
    nums2 := []int{1, 3, 4, 2}

    fmt.Println(nextGreaterElement(nums1, nums2))

}
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册