- 一维数组找峰点
- 二维数组
- 玩一下代码
- 一维数组找峰点
FM(find middle,自己给算法起个名字,不知道中文叫啥)
第二个位置是一个峰点,当且仅当 b>a,b>c 。如果 i>h ,则第九个位置是峰点。
在大数据集上,试图找到一个峰点,返回他的索引,怎么找最好?
最直接的其实就是遍历一遍数组,比较之后找到一个最大的。但我们的要求是找到一个峰点,并没有要求一定是最高点。
问:这样的方法是最好的吗?
很明显不是最好的啦,还问。。。
很明显,从中间切一下,就省很多时间。
给定n 维数组A,算法如下:
- 选中数组的中间元素 An2 ,并且对比他左右的元素
- 如果他大于或等于他左右的元素,则这个点为峰点,返回 n2 ,
- 如果右边的元素大于中间的元素,则下一次的算法用在右边的数组,且不包含中间元素
- 如果左边的元素大于中间的元素,则下一次的算法用在左边的数组,且不包含中间元素
运行时间分析
我们把n维数组转换成 n2 ,复杂度分析如下:
T