题目:
简述题目:
题目的要求其实就是找出数组中的一个“中间数”,也就是整个数组中的一个“峰值”的index
思路:
1、依次遍历,然后找出那个A[i] >= A[i-1] && A[i] < A[i+1]的i值,但时间复杂度为O(n)
2、二分查找,如果A[mid] < A[mid+1] ,就在后半段找,反之就在前半段找,时间复杂度为O(log(n))
public class peakIndexInMountainArray852 {
public static int peakIndexInMountainArray(int[] A) {
//直接遍历法,时间复杂度为O(n)
// for(int i = 0; i < A.length;i++){
// if(A[i] > A[i+1])
// return i;
// }
// return -1;
// 二分查找,时间复杂度为O(log(n))
int l = 0;
int r = A.length -1;
int mid = 0;
while(l < r){
mid = (l+r)/2;
if(A[mid] <= A[mid + 1]){
l = mid +1;
}
else{
r = mid;
}
}
return l;
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] A = {0,2,2,3,1,0};
System.out.println(peakIndexInMountainArray(A));
}
}