📅  最后修改于: 2023-12-03 15:37:44.147000             🧑  作者: Mango
当处理数组时,有时需要确定每个元素左侧的更大元素。可以使用某些算法来解决此问题,其中最简单且广泛使用的算法是“Stack based approach”。
想要以线性时间解决该问题,可以使用“Stack based approach”。基本思想是将数组元素从左到右扫描,并使用堆栈记录当前最大元素。对于每个元素,如果该元素大于堆栈顶部元素,则将该元素推送到堆栈中。否则,将堆栈中所有较小的元素弹出,直到堆栈顶部元素大于当前元素,然后将堆栈顶部元素作为当前元素左侧的比其更大的元素。程序员可以使用下面的算法来实现这一算法。
def calculate_left_greater_elements(arr):
"""
Function to calculate the greater elements
to the left of each array element.
Arguments:
arr -- list of integers
Returns:
greater -- list of integers with greater
elements to the left of each array
element.
"""
stack = []
greater = []
for i in range(len(arr)):
while stack and stack[-1] < arr[i]:
stack.pop()
if not stack:
greater.append(-1)
else:
greater.append(stack[-1])
stack.append(arr[i])
return greater
考虑以下数组:
arr = [2, 7, 3, 5, 4, 6, 8]
应用上述算法,可以得到以下输出:
[None, -1, 7, 7, 5, 7, 6]
这意味着,对于给定的数组arr
中的第0个元素没有左侧的更大元素,而对于第1个元素,左侧的更大元素为-1,对于第2个元素,左侧的更大元素为7,以此类推。
本文介绍了一种算法“Stack based approach”来计算每个元素左侧的更大元素。该算法时间复杂度为O(n),在实践中被广泛使用。程序员可根据上述算法实现其算法。