LC每日一题|20240624 - 503. 下一个更大元素 II

26 阅读1分钟

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