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