山脉数组的峰顶索引
Peak Index in a Mountain Array
解
题目说了那么多,其实就是找出最大值的索引
方法一:暴力法
直接遍历
int peakIndexInMountainArray(int* A, int ASize)
{
for (int i = 1; i < ASize - 1; i++){
if (A[i] > A[i - 1] && A[i] > A[i + 1]){
return i;
}
}
return -1;
}
结果
效率低下…
方法二:双指针
int peakIndexInMountainArray(int* A, int ASize)
{
int i = 0;
int j = ASize - 1;
while (i != j){
if (A[i] > A[j]){
j--;
}else{
i++;
}
}
return i;
}
结果
方法三:Binary Search
int peakIndexInMountainArray(int* A, int ASize)
{
int head = 0, last = ASize - 1;
while (head <= last){
int mid = (head + last) / 2;
if (A[mid] > A[mid - 1] && A[mid] > A[mid + 1]){
return mid;
}else if(A[mid] > A[mid - 1]){
head = mid + 1;
}else{
last = mid + 1;
}
}
return -1;
}
结果