LeetCode 503. 下一个更大元素 II
题目描述
思路分析
我们可以使用栈来解决这个问题。具体思路如下:
- 初始化一个栈和一个数组
res
,数组的长度与输入数组长度相同,初始值都为 -1。- 遍历数组两次(模拟循环数组),对于每个元素:
- 如果栈不为空且当前元素大于栈顶元素,则更新
res
数组中栈顶元素对应的位置为当前元素,并弹出栈顶元素。- 将当前元素的索引压入栈。
- 最终返回
res
数组。
参考代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
func nextGreaterElements(nums []int) []int {
n := len(nums)
res := make([]int, n)
for i := range res {
res[i] = -1
}
var stack []int
for i := 0; i < 2*n; i++ {
num := nums[i%n]
for len(stack) > 0 && num > nums[stack[len(stack)-1]] {
res[stack[len(stack)-1]] = num
stack = stack[:len(stack)-1]
}
if i < n {
stack = append(stack, i)
}
}
return res
}
1
write your code here
CC BY-NC-SA 4.0
许可协议,转载请注明出处!
本博客所有文章除特别声明外,均采用