leetcode128 Longest Consecutive Sequence

 1 """
 2 Given an unsorted array of integers, find the length of the longest consecutive elements sequence.
 3 Your algorithm should run in O(n) complexity.
 4 Example:
 5 Input: [100, 4, 200, 1, 3, 2]
 6 Output: 4
 7 Explanation: The longest consecutive elements sequence is [1, 2, 3, 4]. Therefore its length is 4.
 8 """
 9 """
10 解法一:关键用了自查找的想法,找到以后删除,节省时间
11 将nums用set处理一下,然后看成一个队列
12 首先将nums[0]出队列
13 令 j = nums[0]+1 ,判断nums[0]右边的连续数字是否在nums中,
14 如果存在:将nums[j]从数组中移除remove, j=j+1, 数字增大继续检查是否在nums中,
15 令 i = nums[0]-1, 判断nums[0]左边的连续数字是否在nums中,
16 如果存在:将nums[i]从数组中移除remove, i=i-1, 数字减小继续检查是否在nums中
17 用res=max(res, j-i-1)记录最大长度
18 """
19 class Solution1:
20     def longestConsecutive(self, nums):
21         nums = set(nums)
22         res = 0
23         while nums:
24             n = nums.pop()
25             j = n+1 #!!!这种自查找式的思路很新颖
26             while j in nums:
27                 nums.remove(j)
28                 j += 1
29             i = n-1 #!!!
30             while i in nums:
31                 nums.remove(i)
32                 i -= 1
33             res = max(res, j-i-1)
34         return res
35 """
36 利用dict(),以数组中每个值为key,以该值往后连续序列为value,默认为1
37 并将i+1遍历后的数值删去
38 """
39 class Solution2:
40     def longestConsecutive(self, nums):
41         d = dict()
42         res = 0
43         for num in nums:
44             d[num] = 1
45         for num in nums:
46             if num in d:
47                 temp = num+1
48                 while temp in d:
49                     d[num] += d[temp]
50                     d.pop(temp)
51                     temp += 1
52                 res = max(res, d[num])
53         return res
原文地址:https://www.cnblogs.com/yawenw/p/12410477.html