数组中的峰值元素

Muk*_*ina 5 arrays algorithm binary-search

因此,我试图解决以下问题:

给定一个整数数组。在其中找到一个峰元素。如果数组元素不小于其相邻元素,则它是峰值。对于拐角元素,我们只需要考虑一个邻居。例如,对于输入数组{5,10,20,15},20是唯一的峰值元素。对于输入数组{10,20,15,2,23,90,67},有两个峰值元素:20和90。请注意,我们需要返回任何一个峰值元素。

来自以下链接:http : //www.geeksforgeeks.org/find-a-peak-in-a-given-array/

有一次他们说

如果中间元素小于其左邻元素,则左半部分始终存在一个峰值。

在这一点上,我感到困惑,我们如何确定左半部分会有一个峰元素?我只能从中得出的结论是,至少有1个元素肯定大于其右邻元素(即a [m-1]),所以有可能它可能是峰值元素)。我在stackoverflow和其他站点上进行了研究,但是对于上述结论找不到很好的解释

谢谢您的帮助!

use*_*ica 5

假设您正站在一个比其左邻居低的中间元素上:

            element
                         you
                       element
Run Code Online (Sandbox Code Playgroud)

您向左看。它看起来像一座小山。

假设您爬上那座山。你看到了什么?好吧,有三种可能性:

1.
  element
              you
            element

                       element

2.
              you
  element   element

                       element

3.
              you
            element

  element              element
Run Code Online (Sandbox Code Playgroud)

在案例2和案例3中,万岁!您已经找到一个高峰。在第一种情况下,您将继续攀爬。最终,您看到的元素不高于您,或者碰到了左墙。无论哪种情况,您都会发现一个高峰。