下一个更大元素 II
Next Greater Element II
本机进度仅保存在当前浏览器
题目描述
给定一个循环数组 nums(最后一个元素的下一个元素是数组第一个元素),返回每个元素的下一个更大元素;不存在则输出 -1。
示例:nums = [1, 2, 1],输出 [2, -1, 2]。
解题思路
- 循环数组的标准处理:遍历下标 i 取模,总长度扫描 2n 次,模拟"绕圈"。
- 单调栈存下标,遇到更大的值就结算栈顶,与线性版一致。
- 第二次扫描开始前不清栈:前一轮留在栈中的元素会在第二轮被后续更大元素结算,天然处理跨界查找。
参考实现
查看参考实现Python · 建议先自行作答
def nextGreaterElements(nums):
n = len(nums)
ans = [-1] * n
stack = []
# 扫描 2n 次模拟循环数组
for i in range(2 * n):
x = nums[i % n]
while stack and nums[stack[-1]] < x:
ans[stack.pop()] = x
if i < n:
stack.append(i)
return ans