[本文出自天外归云的博客园]

题目:有一个数组,求他的最大(最长)连续区间(数字是连续的区间)。

我的解法,如下:

class Finder(object):
'''
判断两个相邻的数字是否连续,若连续:
1.继续向后判断
2.记录连续长度
最后返回最大连续长度
'''
def find_continuity(self,index,array,length=1):
if index+1 < len(array):
_curr = array[index]
_next = array[index+1]
if abs(_next-_curr) == 1:
length += 1
length = self.find_continuity(index+1,array,length)
return length '''
将每个数字开头的索引值及最大连续区间长度存入字典
找出字典中最大的键值即最大连续区间
根据最大连续区间的索引和长度返回对应的数组切片
'''
def find_longest(self,array):
continuity = dict()
for i in range(len(array)):
length = self.find_continuity(i,array)
continuity[i] = length
longest = max(continuity.items(), key=lambda x: x[1])
index,length = longest[0],longest[1]
return array[index:index+length] if __name__ == '__main__':
array = [1,2,3,4,5,4,2,5,3,4,7,1,5,9,10,9,8,7,6,5,4,3,4,5,6,8]
finder = Finder()
longest_array = finder.find_longest(array)
print(longest_array)

后来我又重新写了一下这个递归过程,更简单一点:

def ret_continuous(a, ret):
if len(a) == 1:
return a
if len(ret) == 0:
ret.append(a[0])
if a[0] + 1 == a[1] or a[0] - 1 == a[1]:
ret.append(a[1])
return ret_continuous(a[1:], ret)
else:
return ret if __name__ == '__main__':
a = [1, 2, 99, 3, 4, 5, 6, 5, 4, 4, 2, 6, 3, 1, 8, 5, 3, 6]
longest = []
for i in range(len(a)):
ret = ret_continuous(a[i:], [])
if len(ret) > len(longest):
longest = ret
print(longest)

Python版求数组的最大连续区间的更多相关文章

  1. python numpy 求数组的百位分数

    百分位数,统计学术语,如果将一组数据从小到大排序,并计算相应的累计百分位,则某一百分位所对应数据的值就称为这一百分位的百分位数.运用在教育统计学中,例如表现测验成绩时,称PR值.分位数是以概率将一批数 ...

  2. 求数组中两两相加等于20的组合(Python实现)

    题目 求数组中两两相加等于20的组合. 例:给定一个数组[1, 7, 17, 2, 6, 3, 14],这个数组中满足条件的有两对:17+3=20, 6+14=20. 解析 分为两个步骤: 先采用堆排 ...

  3. C++ 数组长度 以及 数组名作为参数传递给函数 以及 为什么不在子函数中求数组长度

    在看排序,首先是插入排序,思路理清后想用代码实现,然后问题来了: 如何求数组长度? 如果没记错,在Java中应该是有直接可用的方法的, Python中(序列)也有.len,在C/C++中,字符串倒是有 ...

  4. hdu 4638 树状数组 区间内连续区间的个数(尽可能长)

    Group Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Subm ...

  5. python之simplejson,Python版的简单、 快速、 可扩展 JSON 编码器/解码器

    python之simplejson,Python版的简单. 快速. 可扩展 JSON 编码器/解码器 simplejson Python版的简单. 快速. 可扩展 JSON 编码器/解码器 编码基本的 ...

  6. 线性表应用--Josephus问题的解法(Python 版)

    线性表应用 --Josephus问题的解法(Python 版) Josephus问题描述:假设有n个人围坐一圈,现在要求从第k个人开始报数,报到第m个数的人退出.然后从下一个人开始继续报数并按照相同的 ...

  7. 字符串匹配算法之 kmp算法 (python版)

    字符串匹配算法之 kmp算法 (python版) 1.什么是KMP算法 KMP是三位大牛:D.E.Knuth.J.H.MorriT和V.R.Pratt同时发现的.其中第一位就是<计算机程序设计艺 ...

  8. Python版飞机大战

    前面学了java用java写了飞机大战这次学完python基础后写了个python版的飞机大战,有兴趣的可以看下. 父类是飞行物类是所有对象的父类,setting里面是需要加载的图片,你可以换称自己的 ...

  9. ROS Learning-022 learning_tf-06(编程) 现在与过去中穿梭 (Python版) --- waitForTransformFull() 函数

    ROS Indigo learning_tf-06 现在与过去中穿梭 (Python版) - waitForTransformFull() 函数 我使用的虚拟机软件:VMware Workstatio ...

随机推荐

  1. 遇到影响服务器性能的cpuspeed 服务

    最近碰到一个很蛋痛的问题,,我在公司的代码上实现了一个功能,然后基于这个测试,结果比对数据发现每天少三千多万条,, 然后我各种优化,各种零碎部功能阉割,,还是丢数据! 之后,监控运行网卡----wat ...

  2. linux下常用文件传输命令(转)

    因为工作原因,需要经常在不同的服务器见进行文件传输,特别是大文件的传输,因此对linux下不同服务器间数据传输命令和工具进行了研究和总结.主要是rcp,scp,rsync,ftp,sftp,lftp, ...

  3. php加密总结

    1.md5加密,加密之后是32位的字符串 2.sha1加密, 加密之后是40位的字符串 3.crypt加密, 加密之后是13位的字符串 上面是不可逆的 可逆的如下urlencode --> ur ...

  4. 模拟器集成3DTouch-b

    本文主要讲解3DTouch各种场景下的集成,开发主屏幕应用icon上的快捷选项标签(Home Screen Quick Actions),静态设置 UIApplicationShortcutItem ...

  5. MySQL USING 和 HAVING 用法

    USING 用于表连接时给定连接条件(可以理解为简写形式),如 SELECT * FROM table1 JOIN table2 ON table1.id = table2.id   使用 USING ...

  6. Eclipse中Ant的配置与测试

    在Eclipse中使用Ant Ant是Java平台下非常棒的批处理命令执行程序,能非常方便地自动完成编译,测试,打包,部署等等一系列任务,大大提高开发效率.如果你现在还没有开始使用Ant,那就要赶快开 ...

  7. python类内init外声明的属性与init内声明的对象属性的访问和操作区别

    python类内init外声明的属性与init内声明的对象属性的访问和操作区别(面试题) 1.在ipython中输入以下代码,其输出会是什么? In [1]: class ClassOut: ...: ...

  8. Desugar Scala(17) -- Option和for,以及脑子里发生的事情

    欢迎关注我的新博客地址:http://cuipengfei.me/blog/2014/08/30/options-for/ Scala里的forkeyword是个非常有趣的东西. 能够用来把多层嵌套f ...

  9. STM32定时器T2纯软件仿真时间准确,JTAG在线调试查看时间不准的问题

    通过查看Sec的值和上次中断的差值计算的,虽然这个值是不准的 ,但实际上时间是准的, 原因如下:stm32在调试模式下虽然进断点之后程序停止了,但定时器的时钟还在走,计数器还在计数,若要在产生断点时计 ...

  10. Hive实现从表中随机抽样得到一个不重复的数据样本

    select a.* from ( select a.*,rand(12345) as random from tripdata a ) a where random between 0 and 0. ...