| 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
 
- }
 
 
  |