哈希表-记录

2021/5/19

1. 两数之和
class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        num2idx=dict(zip(nums,range(len(nums))))
        for i in range(len(nums)):
            # 如果有相同的数 [1,2,3,3,3,3,4] 3-默认会用最后的value
            # 所以不用担心[3,3] 6的情况
            if(target-nums[i] in num2idx and num2idx[target-nums[i]]!=i):
                return [i,num2idx[target-nums[i]]]
        return []
128. 最长连续序列
class Solution:
    def longestConsecutive(self, nums: List[int]) -> int:
        hashtable=dict(zip(nums,[0]*len(nums)))
        ret=0
        # 用过num之后就改v=1
        for k,v in hashtable.items():
            if(v==0):
                cur=1
                k1=k # 比K小
                k2=k # 比k大
                while(k1-1 in hashtable):
                    k1-=1
                    cur+=1
                    hashtable[k1]=1
                while(k2+1 in hashtable):
                    k2+=1
                    cur+=1
                    hashtable[k2]=1

                #更新
                ret=max(ret,cur)
        
        return ret

还是dict的写法直观,但是也可以用两个set来做

class Solution:
    def longestConsecutive(self, nums: List[int]) -> int:
        nums_set=set(nums)
        visit_set=set()
        ret=0
        for n in nums_set:
            if(n not in visit_set):
                visit_set.add(n)
                cur=1
                n1=n
                while(n1-1 in nums_set):
                    n1-=1
                    cur+=1
                    visit_set.add(n1)
                n1=n
                while(n1+1 in nums_set):
                    n1+=1
                    cur+=1
                    visit_set.add(n1)
                ret=max(ret,cur)

        
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值