📅  最后修改于: 2023-12-03 15:35:56.064000             🧑  作者: Mango
在处理数组相关问题时,可能会涉及到寻找数组中某个元素的下一个更大的元素,且要求这个更大的元素的位置在原数组中与该元素位置相同。这个问题可以通过使用栈来解决,时间复杂度为 O(n)。
我们可以从右往左遍历数组,维护一个栈。栈中存储原数组中尚未找到下一个更大元素的元素。对于每个元素,我们首先将栈顶元素与当前元素进行比较。如果栈顶元素更大,那么当前元素的下一个更大元素就是栈顶元素。我们把这个更大的元素存储到结果数组中,并将当前元素入栈。如果当前元素更大,那么我们就需要弹出栈顶元素,继续比较栈顶元素和当前元素,直到栈为空或者栈顶元素更大。
下面是一个 Python 代码的实现:
def next_greater_element(nums):
stack = []
res = [0] * len(nums)
for i in range(len(nums) - 1, -1, -1):
while stack and stack[-1] <= nums[i]:
stack.pop()
res[i] = stack[-1] if stack else -1
stack.append(nums[i])
return res
上面的代码时间复杂度为 O(n),空间复杂度为 O(n)。