寻找数组元素右边第一个比它大的数 - 算法解析及 Python 代码

题目描述:

给定一个数组,对于每个元素,找到它右边第一个比它大的数,如果不存在,则输出-1。

示例:

输入: [4, 5, 2, 25]

输出: [5, 25, 25, -1]

解释:

4 右边第一个比它大的数是 5; 5 右边第一个比它大的数是 25; 2 右边第一个比它大的数是 25; 25 右边没有比它大的数,输出-1。

算法思路:

从右到左遍历数组,用一个栈来保存从右到左遍历过的元素。对于每个元素,如果栈为空,则将-1入栈;否则,如果栈顶元素大于当前元素,则将栈顶元素入栈;否则,弹出栈顶元素,直到栈为空或栈顶元素大于当前元素,然后将当前元素入栈。最后将栈中剩余的元素全部弹出并赋值为-1。

**时间复杂度:**O(n)

**空间复杂度:**O(n)

Python代码:

class Solution:
    def nextGreaterElements(self, nums: list[int]) -> list[int]:
        n = len(nums)
        res = [-1] * n
        stack = []
        for i in range(2 * n - 1, -1, -1):
            while stack and nums[stack[-1]] <= nums[i % n]:
                stack.pop()
            res[i % n] = nums[stack[-1]] if stack else -1
            stack.append(i % n)
        return res
寻找数组元素右边第一个比它大的数 - 算法解析及 Python 代码

原文地址: https://www.cveoy.top/t/topic/fWgA 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录