你给出一个整数数组(size为n),其具有以下特点:
- 相邻位置的数字是不同的
- A[0] < A[1] 并且 A[n - 2] > A[n - 1]
假定P是峰值的位置则满足A[P] > A[P-1]
且A[P]
> A[P+1]
,返回数组中任意一个峰值的位置。
public class Solution { /* * @param A: An integers array. * @return: return any of peek positions. */ public int findPeak(int[] A) { // write your code here if (A == null || A.length < 3) { return -1; } int left = 0; int right = A.length - 1; while (left < right) { int middle = (left + right) / 2; if (middle == 0) { return 1; } else if (middle == A.length - 1) { return middle - 1; } else if (A[middle] > A[middle - 1] && A[middle] > A[middle + 1]) { return middle; } else if (A[middle] < A[middle - 1]) { right = middle - 1; } else { left = middle + 1; } } return left; } }