public int findPeakElement (int[] nums) {
//分析二分条件,Mid位置,有如下几种情况
//1.nums[i-1]<nums[i]<nums[i+1] 上坡,向右走找到当前的坡顶
//2.nums[i-1]>nums[i]>nums[i+1] 下坡,向左走找到坡顶
//3.nums[i-1]<nums[i]>nums[i+1] 峰值,直接返回
//4.nums[i-1]>nums[i]<nums[i+1] 在坑里,向左向右都有坡顶,那就规定向右吧
//综上所述:加上不可能出现折返的情况,可以二分
//如果1.峰值返回2.nums[i]<nums[i+1]则向右3.其他向左
if(nums==null||nums.length==0) return -1;
int N = nums.length;
if(N==1) return 0;
if(N==2) return nums[0]>nums[1]?0:nums[0]==nums[1]?-1:1;
if(nums[0]>nums[1]) return 0;
if(nums[N-1]>nums[N-2]) return N-1;
int left = 0,right = N-1;
while(left<right){
int mid = ((right-left)>>>1)+left;
if(nums[mid]>nums[mid-1]&&nums[mid]>nums[mid+1]){
return mid;
}else if(nums[mid]<nums[mid+1]){
left = mid + 1;
}else{
right = mid - 1;
}
}
return left==right?left:-1;
}