假设我们必须在数组中找到峰值元素。峰值元素是大于其相邻元素的元素。假设我们有一个输入数组nums,其中nums [i]≠nums [i + 1],搜索一个峰值元素并返回其索引。该数组可以容纳多个峰值元素,在这种情况下,将索引返回到任何一个峰值元素。我们可以想象nums [-1] = nums [n] =-∞。因此,如果数组类似于[1,2,1,3,5,6,4],则峰元素应为1或5。
为了解决这个问题,我们将遵循以下步骤-
低:= 0和高:=数组的最后一个索引,n:=数组的大小,ans:=无穷大
而低<=高
中:=低+(高-低)/ 2
如果mid – 1> = 0并且nums [mid – 1] <= nums [mid],则低:=中,否则高:=中-1
返回低
让我们看下面的实现以更好地理解-
class Solution(object): def findPeakElement(self, nums): low = 0 high = len(nums)-1 while low<high: mid = low + (high - low+1)//2 if (mid-1>=0 and nums[mid-1]<=nums[mid]): low = mid else: high = mid-1 return nums[low+1] ob1 = Solution()print(ob1.findPeakElement([15,35,85,96,5,6,8,12]))
[15,35,85,96,5,6,8,12]
输出结果
5