leedcode-哈希表篇(4)

128.最长连续序列

题目

给定一个未排序的整数数组nums,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度
进阶:你可以设计并实现复杂度为o(n)的方案吗?
示例1:

输入:nums=[100,4,200,1,3,2]
输出:4
解释:最长数字连续序列是【1,2,3,4】。它的长度为4

示例2:

输入:nums=【0,3,72,5,8,4,6,0,1】
输出:9

一开始我的想法是用暴力法解决,就是先用冒泡排序把数组给排好,然后再遍历排序好的数组,看相邻元素是否相差1,如果不是,就截取那个位置,返回长度。

class Solution(object):
    def longestConsecutive(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        if not nums: return 0
        for i in range(0,len(nums)-1):
            for j in range(0,len(nums)-i-1):
                if nums[j]>nums[j+1]:
                    t =nums[j]
                    nums[j]=nums[j+1]
                    nums[j+1]=t
        print(nums)
        # nums=list(set(nums))
        
        mark=0
        for k in range(len(nums)-1):
            if abs(nums[k+1]-nums[k])==1:
                mark+=1
        return mark+1

这个代码可以通过以上两个测试用例,但是却不能通过最终测试,原因是,其余测试会出现,如果出现负数,恐怕会失效。
所以我还是看了答案思路。借助集合筛选重复元素,并初始化列表长度,用一个变量存储当前值,并判断与这个当前值相差1的元素是否在集合中,如果有,则统计长度加1,目的是判断相邻元素的个数,个数就是返回的长度

class Solution(object):
	def longestConsecutive(self,nums):
		if not nums: return 0
		max_len=0
		hashmap=set(nums)
		for i in range(len(nums)):
			if nums[i]-1 not in hashmap:
				leng=1
				cur=nums[i]
				while cur+1 in hashmap:
					cur+=1
					leng+=1
				max_len=max(leng,max_len)
		return max_len

测试用例

def longestConsecutive(nums):
    """
    :type nums: List[int]
    :rtype: int
    """
    if not nums: return 0
    max_len=0
    hashmap=set(nums)
    for i in range(len(nums)):
        if nums[i]-1 not in hashmap:
            leng=1
            cur=nums[i]
            while cur+1 in hashmap:
                leng+=1
                cur+=1
            max_len=max(max_len,leng)
    return max_len

nums=[0,3,7,2,5,8,4,6,0,1]
print(longestConsecutive(nums))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值