在Python中以给定的音调序列查找音调点

假设我们有一个双音序列,我们必须在其中找到一个双音点。众所周知,双音序列是一个数字序列,首先严格增加,然后在某一点之后严格减少。这个点是双音点。对于仅增加或减少的序列,双音点不可用。

因此,如果输入类似于[7、8、9、12、10、6、3、2],则输出为12

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

  • 定义一个函数binary_search(array,l,r)

  • 如果l <= r,则-

    • m:=(l + r)/ / 2

  • 如果array [m-1] <array [m]和array [m]> array [m + 1],则-

    • 返回m

  • 如果array [m] <array [m + 1],则-

    • 返回binary_search(array,m + 1,r)

  • 除此以外

    • 返回binary_search(array,l,m-1)

  • 返回-1

示例

让我们看下面的实现以更好地理解-

def binary_search(array, l, r):
   if (l <= r):
      m = (l + r) // 2;
      if (array[m - 1] < array[m] and array[m] > array[m + 1]):
         return m;
      if (array[m] < array[m + 1]):
         return binary_search(array, m + 1,r);
      else:
         return binary_search(array, l, m - 1);
   return -1;
array = [7, 8, 9, 12, 10, 6, 3, 2]
n = len(array);
index = binary_search(array, 1, n-2);
if (index != -1):
   print(array[index]);

输入值

[7, 8, 9, 12, 10, 6, 3, 2]

输出结果

12
猜你喜欢