LC每日一题|20240624 - 503. 下一个更大元素 II
给定一个循环数组
nums
(nums[nums.length - 1]
的下一个元素是nums[0]
),返回nums
中每个元素的 下一个更大元素 。数字
x
的 下一个更大的元素 是按数组遍历顺序,这个数字之后的第一个比它更大的数,这意味着你应该循环地搜索它的下一个更大的数。如果不存在,则输出-1
。
提示:
1 <= nums.length <= 10^4
-10^9 <= nums[i] <= 10^9
题目等级:Medium
解题思路
单调栈。
循环数组?大不了就跑两次嘛~
AC代码
class Solution {
fun nextGreaterElements(nums: IntArray): IntArray {
val result = IntArray(nums.size + nums.size) { -1 }
val stack = Stack<Int>()
for (i in result.indices) {
while (stack.isNotEmpty() && nums[stack.peek() % nums.size] < nums[i % nums.size]) {
val pop = stack.pop()
result[pop] = nums[i % nums.size]
}
stack.push(i)
}
return IntArray(nums.size) {result[it]}
}
}