用Python计算数组中的局部极大值
发布时间
阅读量:
阅读量
求数组局部最大值
假设有一个无重复元素的一维数组A,请确定该数组中的局部极大值位置。
特别地,在超出数组范围的位置视为负无穷。
显而易见的方法是遍历整个数组以获取全局极大值。
然而,在这种情况下,
是否有可能通过某种优化方法来加快计算速度?
算法描述
将索引变量left和right分别赋值为数组的起始和末尾位置。
计算中点的位置mid等于(left + right)除以二。
若发现A[mid]大于A[mid+1]时,则放弃右半部分并将right设为当前中点。
反之若发现A[mid+1]大于A[mid]时,则放弃左半部分并将left设为当前中点加一。
通过递归过程不断缩小范围直至左右指针相遇。
该算法的时间复杂度为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:
全部评论 (0)
还没有任何评论哟~
