496.next-greater-element-i.go 483 B

123456789101112131415161718192021
  1. func nextGreaterElement(findNums []int, nums []int) []int {
  2. stack := make([]int, 0) // Keep a decease stack
  3. next := make(map[int]int)
  4. for _, i := range nums {
  5. for l := len(stack); l != 0 && stack[l-1] < i; l = len(stack) {
  6. top := stack[l-1]
  7. stack = stack[:l-1]
  8. next[top] = i
  9. }
  10. stack = append(stack, i)
  11. }
  12. res := make([]int, len(findNums))
  13. for i := range res {
  14. if val, ok := next[findNums[i]]; ok {
  15. res[i] = val
  16. } else {
  17. res[i] = -1
  18. }
  19. }
  20. return res
  21. }