Leetcode 162 Find Peak Element

A peak element is an element that is strictly greater than its neighbors.

Given an integer array nums, find a peak element, and return its index. If the array contains multiple peaks, return the index to any of the peaks.

You may imagine that nums[-1] = nums[n] = -∞.

You must write an algorithm that runs in O(log n) time.

Input: nums = [1,2,3,1]
Output: 2
Explanation: 3 is a peak element and your function should return the index number 2.
Input: nums = [1,2,1,3,5,6,4]
Output: 5
Explanation: Your function can return either index number 1 where the peak element is 2, or index number 5 where the peak element is 6.
  • Soruda bize liste veriliyor.Bu listedeki sayılar karışık olarak verilmiş.Ve bizden tepe noktasını bulmamız isteniyor.
  • Tepe noktası demek sayının solundaki ve sağındaki sayılardan büyük olması.
  • İkili arama ile bu soruyu çözebiliriz.
  • İlk orta noktayı bulduğumuzda eğer orta noktanın sağındaki sayı orta noktadan büyük ise bu sayı tepe değildir.
  • Bu durumda sol işaretçiyi orta nokta + 1 yaparız.
  • Eğer orta noktanın sağındaki sayı orta noktadan büyük değil ise sağ işaretçiyi orta nokta yaparız.
class Solution:
    def findPeakElement(self, nums: List[int]) -> int:
        l,r = 0 ,len(nums)-1
        
        while l<r:
            mid=(l+r)//2
            if(nums[mid]<nums[mid+1]):
                l=mid+1
            else:
                r=mid
        return l