206 山脉数组的峰顶索引

问题描述:符合下列属性的数组arr称为山脉数组:
1 arr.length>=3
2 存在i(0<i<arr.length-1)使得arr[0]<arr[1]<...arr[i-1]<arr[i]。arr[i]>arr[i+1]>...>arr[arr.length-1].

直接查找的方式:

public int findPeakIndex(int []nums)
{
for(int i=1;i<nums.length;i++)
{
if(nums[i]<nums[i-1])
{
return i-1;
}
}
}

二分法查找:山脉数组前面部分是升序的,后面部分是降序的,所以也可以使用二分法,用中间的值和他的下一个比较(根据题中对山脉数组的定义),所以数组中挨着的两个数字一定不可能相同的,要么比下一个小,要么比下一个大,如果比下一个小,说明还处于上升阶段,缩小范围到[mid+1,right],如果比下一个大,说明处于下降阶段,缩小查找范围[left,mid].

public int findIndex(int[]nums)
{
int left=0;
int right=nums.length-1;
int mid=(left+right)>>1;
while(right>left)
{
if(nums[mid-1]<nums[mid])
{
left=mid+1;
}else
{
right=mid-1;
}
}
return left;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值