题目
输入一个乱序的连续数列,输出其中最长连续数列长度,要求算法复杂度为 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()函数会把数转换成二进制并且用字符串表示,只要对得到的字符串进行处理就可以了。
具体代码如下:

博客介绍了如何使用Python在O(n)时间复杂度内找到乱序连续数列的最长连续长度。通过将数列转化为二进制并分析字符串中的连续1,实现了空间效率的优化。代码展示了解决方案,适用于大数据量场景。
最低0.47元/天 解锁文章

8万+

被折叠的 条评论
为什么被折叠?



