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
}