Python 求数组局部最大值的实例

yipeiwu_com7年前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设计】。

相关文章

Python处理时间日期坐标轴过程详解

Python处理时间日期坐标轴过程详解

1. 前言 当日期数据作为图表的坐标轴时通常需要特殊处理,应为日期字符串比较长,容易产生重叠现象 2. 设定主/次刻度 2.1 引用库 from matplotlib.date...

使用Python实现将list中的每一项的首字母大写

如下所示: L = ['adam', 'Lisa', 'bart', 'Paul'] m=0 for i in L: L[m]=i[0].upper()+i[1:] m=m+...

python中pip的使用和修改下载源的方法

基本命令 显示版本信息 pip -V 安装指定包 pip install <packages> pip install -i 'host' <package...

从CentOS安装完成到生成词云python的实例

从CentOS安装完成到生成词云python的实例

前言 人生苦短,我用python。学习python怎么能不搞一下词云呢是不是(ง •̀_•́)ง 于是便有了这篇边实践...

DataFrame中的object转换成float的方法

DataFrame中的object转换成float的方法

数据类型转换: 今天遇到一个问题,就是DataFrame类型的数据里是str型的数字,想把数字转换为int 或float;百度没有发现好的,也可能输入的关键字不对,找不到; DataFr...