使用二分进行分治,mid将数组分为两部分。试探mid+1大于mid则往右为上升趋势(mid不可能为峰值 left = mid +1),否则往左为上升趋势(mid可能为峰值,right = mid)(题目说明相邻元素不相等)。以此将区间定为右或左边。
代码实现:
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param nums int整型一维数组
* @return int整型
*/
public int findPeakElement (int[] nums) {
// write code here
//左右都是无穷小
int left = 0 , right = nums.length-1;
while(left < right){
int mid = (right + left) >> 1;
if(nums[mid] < nums[mid+1]){left = mid +1;}
else{right = mid;}
}
return right;
}
}
为什么是while(left < right)作为终止条件?