46. Peak Index in a Mountain Array

Topic :

binary search

Difficulty :

medium

Problem Link :


problem statement

An array arr a mountain if the following properties hold:

  • arr.length >= 3
  • There exists some i with 0 < i < arr.length - 1 such that:
    • arr[0] < arr[1] < ... < arr[i - 1] < arr[i]
    • arr[i] > arr[i + 1] > ... > arr[arr.length - 1]

Given a mountain array arr, return the index i such that arr[0] < arr[1] < ... < arr[i - 1] < arr[i] > arr[i + 1] > ... > arr[arr.length - 1].

You must solve it in O(log(arr.length)) time complexity.

Example 1:

Input: arr = [0,1,0]
Output: 1
Example 2:

Input: arr = [0,2,1,0]
Output: 1
Example 3:

Input: arr = [0,10,5,2]
Output: 1

Constraints:

  • 3 <= arr.length <= 105
  • 0 <= arr[i] <= 106
  • arr is guaranteed to be a mountain array.

solution

import java.io.*;
import java.util.*;
class PeakElement_MountainArray
{
    public static void main (String args[])
    {
        int arr[]={3,5,3,2,0};
        System.out.println(peakIndexInMountainArray(arr));
    }
     static int peakIndexInMountainArray(int[] arr) {
        int start = 0;
        int end = arr.length-1;
    
       //peak element is greater than its left and right elements!
    
      while(start<=end){
	
        int mid = start+(end-start)/2;
		
        if(arr[mid+1] < arr[mid] && arr[mid -1] < arr[mid]){
            return mid;
        }
       
        else if(arr[mid+1]>arr[mid]){
            start=mid+1;
        } else{
            end = mid-1;    
        }
      }
       return -1;   // if no peak element so return -1
    }
}
Copyright © 2023 KIZLE. - All Rights Reserved.
Website by Kounik Maitra