📜  上一个更大的元素(1)

📅  最后修改于: 2023-12-03 15:35:53.253000             🧑  作者: Mango

上一个更大的元素

上一个更大的元素是指在一个整数数组中,对于每个元素,找到数组中右侧第一个比该元素大的值,并返回其下标。如果不存在满足条件的元素,则返回-1。

本文将介绍如何实现找到上一个更大的元素的算法。

方法一:暴力枚举

暴力枚举算法思路较为简单,对于每个元素,向右遍历数组,直到找到第一个比该元素大的值。时间复杂度为O(N^2),效率较低。

def prevGreaterElement(nums: List[int]) -> List[int]:
    n = len(nums)
    res = [-1] * n
    for i in range(n):
        for j in range(i + 1, n):
            if nums[j] > nums[i]:
                res[i] = j
                break
    return res
方法二:单调栈

单调栈算法的时间复杂度为O(N),效率极高。该算法思路如下:

  1. 初始化一个空栈,从右向左遍历数组,对于每个元素执行以下步骤:
  2. 如果栈不为空,且当前元素比栈顶元素大,表示找到了第一个比该元素大的值,栈顶元素出栈,并将其下标作为当前元素的答案。重复此步骤直到不再满足条件。
  3. 将当前元素作为一个新的较小值入栈。
def prevGreaterElement(nums: List[int]) -> List[int]:
    n = len(nums)
    stack = []
    res = [-1] * n
    for i in range(n - 1, -1, -1):
        while stack and nums[stack[-1]] <= nums[i]:
            stack.pop()
        if stack:
            res[i] = stack[-1]
        stack.append(i)
    return res

以上两种方法都可以用来解决上一个更大的元素问题,具体选用哪种方法视情况而定。