假设我们有一个整数数组;我们必须找到数组中每个元素的最左和最右的较小元素之间的最大绝对差。如果任何元素的右侧或左侧没有较小的元素,则我们将零作为较小的元素。
因此,如果输入像A = [3、5、9、8、8、8、10、4],则输出将是4,因为左元素L = [0、3、5、5、5、8、3 ],右元素R = [0,4,8,4,4,4,0],最大绝对差L [i]-R [i] = 8-4 = 4。
为了解决这个问题,我们将遵循以下步骤-
定义一个函数left_small_element()。这需要A,临时
n:= A的大小
堆栈:=一个新列表
对于0到n范围内的i,执行
temp [i]:= 0
temp [i]:=堆栈的顶部元素
从堆栈中删除最后一个元素
当堆栈不为空并且堆栈的顶部元素> = A [i]时,执行
如果堆栈不为空,则
除此以外,
在堆栈末尾插入A [i]
从主要方法中,执行以下操作-
n:= A的大小
左:=大小为n并填充0的列表
右:=大小为n并填充0的列表
left_small_element(A,左)
left_small_element(A,右)
res:= -1
对于0到n范围内的i,执行
res:= res的最大值,| left [i]-right [n-1-i] |
让我们看下面的实现以更好地理解-
def left_small_element(A, temp): n = len(A) stack = [] for i in range(n): while(stack != [] and stack[len(stack)-1] >= A[i]): stack.pop() if(stack != []): temp[i]=stack[len(stack)-1] else: temp[i]=0 stack.append(A[i]) def find_maximum_difference(A): n = len(A) left=[0]*n right=[0]*n left_small_element(A, left) left_small_element(A[::-1], right) res = -1 for i in range(n): res = max(res, abs(left[i] - right[n-1-i])) return res A = [3, 5, 9, 8, 8, 10, 4] print(find_maximum_difference(A))
[3, 5, 9, 8, 8, 10, 4]
输出结果
4