luoheng
10/11/2019 - 11:16 AM

nextGreaterElement

func nextGreaterElement(nums1 []int, nums2 []int) []int {
    res := make([]int, len(nums1))
    for i := 0; i < len(res); i++ {
        res[i] = -1
    }
    pos := make(map[int]int, len(nums1))
    for i, n := range nums1 {
        pos[n] = i
    }
    stack := make([]int, 0, 4)
    for i := 0; i < len(nums2); i++ {
        for len(stack) >= 1 && stack[len(stack)-1] < nums2[i] {
            res[pos[stack[len(stack)-1]]] = nums2[i]
            stack = stack[:len(stack)-1]
        }
        if _, ok := pos[nums2[i]]; ok {
            stack = append(stack, nums2[i])
        }
    }
    return res
}