package com.interview.binarysearch; /** * @author Tushar Roy * Date 01/17/2107 * A peak element is an element that is greater than its neighbors. Find index of peak element in the array. * * Space complexity is O(1) * Time complexity is O(n) * * https://leetcode.com/problems/find-peak-element/ */ public class PeakElement { public int findPeakElement(int[] nums) { int low = 0; int high = nums.length - 1; int middle = 0; while (low <= high) { middle = (low + high)/2; int before = Integer.MIN_VALUE; if (middle > 0) { before = nums[middle - 1]; } int after = Integer.MIN_VALUE; if (middle < nums.length - 1) { after = nums[middle + 1]; } if (nums[middle] > before && nums[middle] > after) { return middle; } else if (before > after) { high = middle - 1; } else { low = middle + 1; } } return middle; } public static void main(String args[]){ int arr[] = {10,5,15,2,23,90,67}; PeakElement pe = new PeakElement(); System.out.println(pe.findPeakElement(arr)); int arr1[] = {10,20,30,40,50}; System.out.println(pe.findPeakElement(arr1)); int arr2[] = {100,90,80,70,60}; System.out.println(pe.findPeakElement(arr2)); } }