对于i: 
如果i左右相邻的柱子都没i高,那么i就是peak, return i.
如果i右边相邻的柱子比i高,那么i的右侧一定存在peak, binarySearch right
如果i左边相邻的柱子比i高,那么i的左侧一定存在peak, binarySearch left
(如果左右都比i高,两遍都有peak, 随便挑一边search)

why?反证法.比如右边相邻的柱子比i高情况下,假设右边不存在peak, 那么右边必须单调递增。
但是最右边nums[n]=-INFINITE, 所以不可能单调递增 -> 假设不成立。
import java.util.*;

public class Solution {
    public int findPeakElement (int[] nums) {
      int l = 0, r = nums.length;
      // binary search nums[l, r)
      while (l < r) {
        int m= l + ((r-l) >> 1);
        boolean higherThanLeft = m-1 < 0 || nums[m] > nums[m-1];
        boolean higherThanRight = m+1 >= nums.length || nums[m] > nums[m+1];
        if (higherThanLeft && higherThanRight) 
          return m;  // found
        else if (higherThanRight) 
          r = m;  // search left
        else 
          l = m + 1;
      }
      return -1;  // shouldn't get here
    }
}