128. Longest Consecutive Sequence

来源:互联网 发布:知乎书店推荐 编辑:程序博客网 时间:2024/06/04 18:00

题意: Given an unsorted array of integers, find the length of the longest consecutive elements sequence.

For example,
Given [100, 4, 200, 1, 3, 2],
The longest consecutive elements sequence is [1, 2, 3, 4]. Return its length: 4.

Your algorithm should run in O(n) complexity.

思路:这题开始完全没思路,因为要求的时间和空间复杂度都是O(n),你要找连续的子序列时间复杂度怎么样都要O(n^2)的吧,后来看了discuss才知道。。。原来是利用了一些简单的数据结构,比如python中从set和dict中查找某个元素所需要的时间复杂度是O(1),因为它们都是hash的结构,而在list中才需要O(n),于是就有了下面两种方法,方法一:

class Solution:    def longestConsecutive(self, nums):        nums = set(nums)        best = 0        for n in nums:            if n - 1 not in nums:                m = n + 1                while m in nums:                    m += 1                best = max(best, m - n)        return best

这个方法比较容易看懂,里面的if n-1 not in nums这句成功降低了时间复杂度,但是我一直有一个疑问,python的set函数为什么会把一个未排序好的数组转为成一个排序好的元组,如果真是这样的话,set函数的时间复杂度就不是作者所说的O(n)了,而应该是O(nlogn)。
方法二:

class Solution:    # @param num, a list of integer    # @return an integer    def longestConsecutive(self, num):        result, lengths = 1, {key: 0 for key in num}        for i in num:            if lengths[i] == 0:                lengths[i] = 1                left, right = lengths.get(i - 1, 0), lengths.get(i + 1, 0)                length = 1 + left + right                result, lengths[i - left], lengths[i + right] = max(result, length), length, length        return result

这个方法没有说明歧义,但是略微复杂了一点,构建一个键值为数字本身,值为已搜索到的子序列差长度的dict,left和right分别为当前子序列的左右边界,最后再更新边界的长度。

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 狗狗得了牙结石怎么办 牙结石掉了有洞怎么办 内衣的钩子会掉怎么办? 新胸罩肩带老掉怎么办 牙齿少了一小块怎么办 儿童牙齿有黑斑要怎么办 牙齿又黄又臭怎么办 大牙烂空了很臭怎么办 牙齿已经烂没了怎么办 牙齿已经蛀没了怎么办 牙齿整个蛀掉了怎么办 小孩恒牙长歪了怎么办 孩子换牙长歪了怎么办 9岁门牙磕松动了怎么办 牙齿摔断了一半怎么办 牙齿从根部断了怎么办 牙断了还有牙根怎么办 牙根断在牙龈里怎么办 后槽牙掉了一半怎么办 孩子门牙摔断了怎么办 2岁宝宝牙齿断了怎么办 小孩乳牙摔掉了怎么办 9孩子门牙磕断了怎么办 牙齿断了但没掉怎么办 大人门牙摔断了怎么办 兔子内牙太长了怎么办 牙齿整个摔断了怎么办 大门牙摔断了怎么办 23岁门牙磕断了怎么办 门牙齿断了一半怎么办 牙齿从中间裂开了怎么办 牙齿断了牙根还在怎么办 手指被兔子咬了怎么办 被家兔咬出血了怎么办 儿童被兔子咬了怎么办 兔子上牙太长了怎么办 兔子牙长出来了怎么办 有做美容冠后悔怎么办 2岁牙釉质损坏怎么办 牙釉质被磨掉了怎么办 孩子牙釉质掉了怎么办