https://leetcode-cn.com/explore/interview/card/bytedance/243/array-and-sorting/1019/
给定一个未排序的整数数组,找出最长连续序列的长度。
要求算法的时间复杂度为 O(n)。
示例:
输入: [100, 4, 200, 1, 3, 2]
输出: 4
解释: 最长连续序列是 [1, 2, 3, 4]。它的长度为 4。
因为要O(n)的算法,这里我先用1个dict保存每个数字是否出现,出现则置位1
在遍历的时候,循环到某个数时,直接往前后各自搜索他的最长的字串,并且把搜索过的位置置位0,这个过程结束后更新最大的长度。代码如下:
class Solution(object):
def longestConsecutive(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
nums_dict = {}
# 建立字典用于查找
for i in nums:
nums_dict [i] = 1
max_len = 0
for i in nums:
if nums_dict[i]!=0:
# 如果等于0 说明被找过了
nums_dict[i] = 0
tmp_len = 1
# 往前找连续数字
tmp_pre = i-1
while tmp_pre in nums_dict:
tmp_len +=1
nums_dict[tmp_pre] = 0
tmp_pre -= 1
# 往后找连续数字
tmp_after = i+1
while tmp_after in nums_dict:
tmp_len += 1
nums_dict[tmp_after] = 0
tmp_after += 1
max_len = max(max_len,tmp_len)
return max_len
网友评论