📅  最后修改于: 2023-12-03 14:56:16.130000             🧑  作者: Mango
本程序的目的是生成一个数组,由每个数组元素右侧出现的最频繁的较大元素组成。
例如,对于数组 [2, 7, 3, 6, 8, 1, 10]
,其结果应为 [7, 8, 6, 8, 10, 10, -1]
。
本程序采用了单调递减栈来解决问题。对于给定的数组 nums
,遍历每个元素,维护一个单调递减栈 stack
。对于每个元素 nums[i]
,在 stack
中找到第一个比它大的元素,并将其放到结果数组中。如果找不到比它大的元素,则把 -1
放到结果数组中。
代码如下:
def find_next_larger_numbers(nums: List[int]) -> List[int]:
stack = []
res = [0] * len(nums)
for i in range(len(nums)):
while stack and nums[stack[-1]] < nums[i]:
res[stack.pop()] = nums[i]
stack.append(i)
# 将栈中剩余的元素赋值为 -1
while stack:
res[stack.pop()] = -1
return res
在调用函数时,传入一个整数数组即可。例如:
nums = [2, 7, 3, 6, 8, 1, 10]
res = find_next_larger_numbers(nums) # [7, 8, 6, 8, 10, 10, -1]
本程序使用单调递减栈解决了生成一个数组,由每个数组元素右侧出现的最频繁的较大元素组成的问题。虽然时间复杂度为 O(n),空间复杂度也为 O(n),但是实际测试中运行速度较快。