LeetCode 503. 下一个更大元素 II

题目描述

503. 下一个更大元素 II

image-20230818153430400

思路分析

我们可以使用栈来解决这个问题。具体思路如下:

  1. 初始化一个栈和一个数组 res,数组的长度与输入数组长度相同,初始值都为 -1。
  2. 遍历数组两次(模拟循环数组),对于每个元素:
    • 如果栈不为空且当前元素大于栈顶元素,则更新 res 数组中栈顶元素对应的位置为当前元素,并弹出栈顶元素。
    • 将当前元素的索引压入栈。
  3. 最终返回 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
}

➡️ 点击查看 Java 题解

1
write your code here
本文作者:
本文链接: https://hgnulb.github.io/blog/2025/18328478
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处!