1095.山脉数组查找目标值

本文记录了作者从Java转到C语言的过程中,解决一个算法问题的思考和实践。问题要求在10000个有序但分段递增/递减的数组中,不超过100次调用get()函数找到目标值。解决方案是先找到数组的峰值,然后对峰值两侧分别应用二分查找策略,以达到logN的时间复杂度。
摘要由CSDN通过智能技术生成

写在前面:由于之前一直学的是Java,然后现在入职华为要用C,所以开始用C写一下算法熟悉一下,顺便记录一下自己的学习过程哈

这个问题特征:

1.找目标值(在一个数组中找一个数字,遍历?二分?分治?)

2.数组是有序的,但是是以最高峰隔开,左边递增,右边递减。

3.要求10000个数中不能超过100次使用get()函数。(就是logN的复杂度啊!!!)

这里就需要考虑到二分了。。。。。。

二分是要求数组是有序的,但这里是分段有序,怎么解决?

其实思路很简单,首先找出山峰,在分别对山峰两边进行二分查找,结果呼之欲出!!!!

/**
 * *********************************************************************
 * // This is the MountainArray's API interface.
 * // You should not implement it, or speculate about its implementation
 * *********************************************************************
 *
 * int get(MountainArray *, int index);
 * int length(MountainArray *);
 */
/*思路,先找山峰,然后两边再找*/
int findInMountainArray(int target, MountainArray*
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值