一个数组A[1...n],满足A[1]>=A[2], A[n] >= A[n-1]。A[i]被成为波谷,意味着:A[i-1] >= A[i] <= A[i+1]。请给出一个算法,找到数组中的一个波谷。O(n)的方法,是很直接,有更快的方法么?
使用二分查找。
int fun(int a[], int n)
{
int left = 0;
int right = n-1;
int result = 1;
while (left < right-1)
{
int mid = left + ((right-left)>>1);
if (a[mid] <= a[mid+1])
{
if (a[mid] <= a[mid-1])
{
result = mid;
break;
}
else
{
right = mid;
}
}
else
{
left = mid;
}
}
return result;
}