在 Python 中查找一个元素,该元素之前的所有元素都小于它,之后的所有元素都大于它


假设我们有一个数组,我们需要找到一个元素,在其之前的所有元素都小于它,在其之后的所有元素都大于它。最后,返回该元素的索引,如果没有这样的元素,则返回 -1。

因此,如果输入类似于 A - [6, 2, 5, 4, 7, 9, 11, 8, 10],则输出为 4。

为了解决这个问题,我们将遵循以下步骤:

  • n := arr 的大小

  • maximum_left := 一个大小为 n 的数组

  • maximum_left[0] := -∞

  • 对于 i 从 1 到 n,执行:

    • maximum_left[i] := maximum_left[i-1] 和 arr[i-1] 中的较大者

  • minimum_right := ∞

  • 对于 i 从 n-1 到 -1,递减 1,执行:

    • 如果 maximum_left[i] < arr[i] 且 minimum_right > arr[i],则:

      • 返回 i

    • minimum_right := minimum_right 和 arr[i] 中的较小者

      • 返回 -1

示例

让我们来看下面的实现,以便更好地理解:

在线演示

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

更新于:2020年8月19日

408 次浏览

开启你的职业生涯

完成课程获得认证

开始学习
广告
© . All rights reserved.