| 1234567891011121314151617181920212223 | func nextGreaterElements(nums []int) []int {	n := len(nums)	next := make([]int, n)	if n == 0 {		return next	}	next[0] = -1	for i := 1; i < n; i *= 2 {		copy(next[i:], next[:i])	}	st := make([]int, 0)	l := 0	for i := 0; i < 2*n; i++ { // Keep a decreasing stack, and traversal for twice		for l != 0 && nums[st[l-1]] < nums[i%n] {			next[st[l-1]] = nums[i%n]			st = st[:l-1]			l--		}		st = append(st, i%n)		l++	}	return next}
 |