package problems.medium; /** * Created by sherxon on 2016-12-30. */ public class FindPeakElement { /** * We use two pointers, low and high. if middle element is peak we return it. * We continue searching right half if middle element is smaller than middle+1 element * else left is searched. Time complexity in O(LgN); * */ public int findPeakElement(int[] a) { int lo = 0; int hi = a.length - 1; while (lo <= hi) { int mid = lo + (hi - lo) / 2; if (mid > 0 && mid < a.length - 1 && a[mid] >= a[mid - 1] && a[mid] >= a[mid + 1]) return mid; if (mid < a.length - 1 && a[mid] < a[mid + 1]) lo = mid + 1; else hi = mid - 1; } return lo; } }