1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
// @Title: 下一个更大元素 II (Next Greater Element II)
// @Author: 15816537946@163.com
// @Date: 2021-03-06 20:59:31
// @Runtime: 32 ms
// @Memory: 6.6 MB
func nextGreaterElements(nums []int) []int {
	n := len(nums)
	ans := make([]int, n)
	for i := range ans {
		ans[i] = -1
	}

	stack := []int{}
	for i := 0; i < n*2-1; i++ {
		for len(stack) > 0 && nums[stack[len(stack)-1]] < nums[i%n] {
			ans[stack[len(stack)-1]] = nums[i%n]
			stack = stack[:len(stack)-1]
		}

		stack = append(stack, i%n)
	}

	return ans
}