Python 求数组局部最大值的实例
求数组局部最大值
给定一个无重复元素的数组A[0…N-1],求找到一个该数组的局部最大值。规定:在数组边界外的值无穷小。即:A[0]>A[-1],A[N-1] >A[N]。
显然,遍历一遍可以找到全局最大值,而全局最大值显然是局部最大值。
可否有更快的办法?
算法描述
使用索引left、right分别指向数组首尾。
求中点 mid = ( left + right ) / 2
A[mid]>A[mid+1],丢弃后半段:right=mid
A[mid+1]>A[mid],丢弃前半段:left=mid+1
递归直至left==right
时间复杂度为O(logN)。
Python代码
def local_maximum(li): if li is None: return left = 0 right = len(li) - 1 while left < right: mid = int((left + right) / 2) if li[mid] > li[mid + 1]: right = mid else: left = mid + 1 return li[left] if __name__ == '__main__': li = [1, 5, 2, 3, 4, 0] result = local_maximum(li) print(result)
输出结果:4
以上这篇Python 求数组局部最大值的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
Python 实现将numpy中的nan和inf,nan替换成对应的均值
这篇文章主要介绍了Python 实现将numpy中的nan和inf,nan替换成对应的均值,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧2020-06-06思考分析Python运算中 a+=b 和 a=a+b是否相等
这篇文章主要为大家介绍了Python运算中a+=b和a=a+b是否相等及原理思考分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪2023-04-04
最新评论