题目

输入一个乱序的连续数列,输出其中最长连续数列长度,要求算法复杂度为 O(n) 。

输入样例

100,4,200,1,3,2

54,55,300,12

1 5,4,3,2,1

1,2,3,4,5,6

输出样例

4

2

1

5

6

这道题是今天在小米OJ上遇到的,解完题搜了一下,网上有很多解法,但好像唯独没有我的这种解法,写出来与大家分享,一起学习。

这种解法是我再看另一个算法题时获得的灵感,那道题是这样的:有40亿个整数,再给一个新的整数,怎样判断整数是否在40亿个数中?

其中一种解法是申请2的32次方个位,如果一个数在这40亿个数中,那么就在对应的位置置1,这种解法总共需要的空间才500MB左右,具体解法我们在这不讨论,下面我们来看看上面的题。

很容易类比,给出的数,在相应的位置1,比如,"1,9,2,7,3",那么,在1、2、3、7、9位置1,其他位是0,最后形成的是"101000111"现在,我们只需要判断最多有多少个1连续就行了,这是很简单的工作,python中bin()函数会把数转换成二进制并且用字符串表示,只要对得到的字符串进行处理就可以了。

具体代码如下:

def solution(line):
    data = line.split(",")
    num = 0
    # 在对应的位置1
    for x in data:
        num = num|(1<<int(x))
    # 获取二进制字符串
    num = bin(num)[2:]
    # 获得最大连续的1数量
    continuous = 0
    maxcontinuous = 0
    for x in num:
        if x == '0':
            if continuous > maxcontinuous:
                maxcontinuous = continuous
            continuous = 0
        else:
            continuous += 1
    return str(maxcontinuous)

这种方法在数据量非常大的时候能够有效地减少执行所需的空间,可以看到,在数据量较小时,运行速度也并不慢。

Python最长连续数列的O(n)解法的更多相关文章

  1. [小米OJ] 4. 最长连续数列

    思路: 时间限制为O(n),即不能使用先排序后寻找的方法. 这里利用哈希表查询插入复杂度都为O(1)的特性来解,利用一个哈希表来保存每一个数字以及其所在数列的长度. 遍历每一个数字n:查询表中是否存在 ...

  2. [LeetCode] 数组的最长连续数, O(n)解法

    Longest Consecutive Sequence Given an unsorted array of integers, find the length of the longest con ...

  3. 【最长连续零 线段树】bzoj1593: [Usaco2008 Feb]Hotel 旅馆

    最长连续零的线段树解法 Description 奶牛们最近的旅游计划,是到苏必利尔湖畔,享受那里的湖光山色,以及明媚的阳光.作为整个旅游的策划者和负 责人,贝茜选择在湖边的一家著名的旅馆住宿.这个巨大 ...

  4. 【python】获取列表中最长连续数字

    最近开发遇到一个功能需求,目的是要获取一个AI分析结果中最长连续帧,比如一个视频中连续3帧有人,那么我认为这个视频就是有人,我就要判断这个视频帧列表中是否有连续的三帧有人.本质就是获取列表中的最长连续 ...

  5. BUPT复试专题—最长连续等差子数列(2014软院)

    题目描述   给定-个长度为N的整数数列,你需要在其中找到最长的连续子数列的长度, 并满足这个子数列是等差的.注意公差小于或等于0的情况也是允许的. 输入 第一行为数据组数T(1~100),表示测试数 ...

  6. 最大连续数列和 牛客网 程序员面试金典 C++ Python

    最大连续数列和 牛客网 程序员面试金典 C++ Python 题目描述 对于一个有正有负的整数数组,请找出总和最大的连续数列. 给定一个int数组A和数组大小n,请返回最大的连续数列的和.保证n的大小 ...

  7. LeetCode--128--最长连续序列(python)

    给定一个未排序的整数数组,找出最长连续序列的长度. 要求算法的时间复杂度为 O(n). 示例: 输入: [100, 4, 200, 1, 3, 2]输出: 4解释: 最长连续序列是 [1, 2, 3, ...

  8. LeetCode--Longest Consecutive Sequence(最长连续序列) Python

    题目描述: Longest Consecutive Sequence(最长连续序列) 中文: 给定一个未排序的整数数组,找出最长连续序列的长度. 要求算法的时间复杂度为 O(n). 英文: Given ...

  9. lintcode: 最长连续序列

    最长连续序列 给定一个未排序的整数数组,找出最长连续序列的长度. 说明 要求你的算法复杂度为O(n) 样例 给出数组[100, 4, 200, 1, 3, 2],这个最长的连续序列是 [1, 2, 3 ...

随机推荐

  1. Flask—07-建立自己的博客(01)

    博客项目 一局王者的时间轻松学会用Flask建立一个属于自己的博客. 需求分析 用户注册登录 用户信息管理 博客发表回复 博客列表展示 博客分页展示 博客收藏点赞 搜索.统计.排序.… 目录结构 bl ...

  2. 【Java】使用Atomic变量实现锁

    Atomic原子操作 在 Java 5.0 提供了 java.util.concurrent(简称JUC)包,在此包中增加了在并发编程中很常用的工具类 Java从JDK1.5开始提供了java.uti ...

  3. dataTable学习心得

    1.引用文件 <link rel="stylesheet" href="https://cdn.datatables.net/1.10.16/css/jquery. ...

  4. vue-router笔记

    1.vue-router 安装 在安装webpack模块时就安装了 eg: vue  init  webpack  demo    (安装webpack模块并取名为demo) 在安装模块时没有安装的话 ...

  5. #leetcode刷题之路12-整数转罗马数字

    罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符 数值I 1V 5X 10L 50C 100D 500M 1000 例如, 罗马数字 2 写做 II ,即为两个并列的 1.12 ...

  6. memcache类的扩展函数

    Memcache — Memcache类 /****连接****/1.Memcache::connect – 创建一个Memcache对象语法:bool Memcache::connect ( str ...

  7. day 10 函数的进阶

    动态传参 (重点)  *    ** 形参  * args在形参位置, *表示不定参数--接受的是位置参数   接受到的位置参数的动态传参:  都是元组 形参的顺序: 位置  *args 默认值  * ...

  8. C语言跳水比赛预测结果

    5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果A选手说:B第二,我第三:B选手说:我第二,E第四:C选手说:我第一,D第二:D选手说:C最后,我第三:E选手说:我第四,A第一:比赛结束后,每 ...

  9. HDOJ:6333-Problem B. Harvest of Apples(组合数学+莫队算法+逆元)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6333 解题心得: 这个题可以说是十分精彩了,首先推组合数学的公式,其中一个很重要的公式是Cnm = C ...

  10. [POJ1014]Dividing(二进制优化多重背包)

    #include <cstdio> #include <algorithm> #include <cstring> using namespace std; int ...