题解 | #寻找峰值#
寻找峰值
https://www.nowcoder.com/practice/fcf87540c4f347bcb4cf720b5b350c76
# # 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 # # # @param nums int整型一维数组 # @return int整型 # class Solution: #除出首尾元素,如果中间某一个元素nums[i]均大于左右元素,即分峰顶 #如果nums[i]<nums[i-1],那么左边元素中一定有封顶,右边同理 #采用分治,每次都能排除一半 def test(self,nums,start,end): if start == end: return 0 elif start == 0 and nums[start]>nums[1]: return 0 elif end == len(nums)-1 and nums[end]>nums[end-1]: return end else: mid = int((start+end)/2) if nums[mid]>nums[mid-1] and nums[mid]>nums[mid+1]: return mid elif nums[mid] < nums[mid-1]: return self.test(nums,start,mid-1) else: return self.test(nums,mid+1,end) def findPeakElement(self , nums: List[int]) -> int: return self.test(nums,0,len(nums)-1)