java 最大递减数_先递增后递减数组查找最大值

问题:给定一个数组,此数组先递增后递减,找出其中最大值位置。

思路:先递增后递减的数组最大元素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;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值