📅  最后修改于: 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),效率极高。该算法思路如下:
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
以上两种方法都可以用来解决上一个更大的元素问题,具体选用哪种方法视情况而定。