写在前面:由于之前一直学的是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*