分析:由题目可得,数组的边界的值是负无穷,我们需要找到其中一个波峰然后返回索引就可以了,所以我们可以找一个标杆元素,然后一直往高处找,这样就一定会找到波峰。 所以我们可以创建两个指针left和right,left指向数组的开头,right指向数组的结尾,。标杆元素就是他们的中间元素,然后判断中间元素和它右边的大小。如果标杆元素大于右边元素,说明右边是往下的,那么不一定有波峰出现,令right=mid,将范围缩小到左边;如果标杆元素小于右边元素,说明右边是往上的,那么一定会有波峰出现,那么令left=mid+1。当left=right循环结束 实现:
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param nums int整型一维数组
* @return int整型
*/
public int findPeakElement (int[] nums) {
// write code here
int left=0;
int right=nums.length-1;
int mid;
while(left<right){
mid=(left+right)>>>1;
if(nums[mid]>nums[mid+1]){
//右边是往下,不一定有波峰
right=mid;
}else{
// 右边是往上一定能找到波峰
left=mid+1;
}
}
return right;//其中一个波峰
}
}