问题:给定一个数组,此数组先递增后递减,找出其中最大值位置。
思路:先递增后递减的数组最大元素A[i],此值最大的条件是A[i]>A[i-1],同时A[i]>A[i+1]。此题目原型为有序数组查找问题,有序数组一般采用二分查找,但是需要注意退出条件。
//传入数组及其大小
int FindMax(int *A, int m)
{
if(m == 0) return -1; //如果数组大小为0,则返回错误
int begin = 0;
int end = m - 1;
int MP = begin + (begin + end)/2;
while(MP > 0 && MP
{
if(A[MP] > A[MP+1] && A[MP] > A[MP-1]){ //如果符合条件就返回此值
return MP;
}else if (A[MP]
begin = MP+ 1;
MP= begin + (end - begin)/2;
}else{ //在递减段
end = MP- 1;
MP= begin + (end - begin)/2;
}
}
if(MP == 0) return 0; //如果数组是完全递减的,则第一个值就是最大值
if(MP == m-1) return m-1; //如果数组是完全递增的,则最后一个值为最大值
return -1;
}