Find Peak Element (Leetcode 162)

Problem Link: https://leetcode.com/problems/find-peak-element/

class Solution:
    def findPeakElement(self, nums: List[int]) -> int:
        
        def modifiedbsearch(nums,i,j,n):
            
            mid=(i+j)//2
            while(i<=j):
                if(mid==0):
                    if(nums[mid]>nums[mid+1]):
                        return mid
                    else:
                        return modifiedbsearch(nums,mid+1,j,n)
                    
                elif(mid==n-1):
                    if(nums[mid]>nums[mid-1]):
                        return mid
                    else:
                        return modifiedbsearch(nums,i,mid-1,n)
                    
                else:
                    if(nums[mid]>nums[mid-1] and nums[mid]>nums[mid+1]):
                        return mid
                    elif(nums[mid]>nums[mid-1]):
                        return modifiedbsearch(nums,mid+1,j,n)
                    elif(nums[mid]>nums[mid+1]):
                        return modifiedbsearch(nums,i,mid-1,n)
                    # If nums[mid]<nums[mid-1] and nums[mid]<nums[mid+1],
                    # you can move to either left side or right side
                    else:
                        return modifiedbsearch(nums,i,mid-1,n)
                   
        n=len(nums)
        if(n==1):
            return 0
        i=0
        j=n-1
        ans=modifiedbsearch(nums,i,j,n)
        return ans
        

Last updated