假设我们有一个数组,我们必须找到一个元素,该元素之前的所有元素均小于该元素,之后的所有元素均大于该元素。最后,返回元素的索引,如果没有这样的元素,则返回-1。
因此,如果输入类似于A-[6、2、5、4、7、9、11、8、10],那么输出将为4。
为了解决这个问题,我们将遵循以下步骤-
n:= arr的大小
maximum_left:=大小为n的数组
maximum_left [0]:=-无穷大
对于1到n范围内的i,执行
maximum_left [i]:= maximum_left [i-1],arr [i-1]的最大值
minimum_right:=无穷大
对于范围在n-1到-1的i,减1,
返回-1
还给我
如果maximum_left [i] <arr [i]和minimum_right> arr [i],则
minimum_right:= Minimum_right的最小值,arr [i]
让我们看下面的实现以更好地理解-
def get_element(arr): n = len(arr) maximum_left = [None] * n maximum_left[0] = float('-inf') for i in range(1, n): maximum_left[i] = max(maximum_left[i-1], arr[i-1]) minimum_right = float('inf') for i in range(n-1, -1, -1): if maximum_left[i] < arr[i] and minimum_right > arr[i]: return i minimum_right = min(minimum_right, arr[i]) return -1 arr = [6, 2, 5, 4, 7, 9, 11, 8, 10] print(get_element(arr))
[6, 2, 5, 4, 7, 9, 11, 8, 10]
输出结果
4