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
with0 < 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
}
}