hot100(Python版)

哈希表

哈希表:存储位置=关键词

列表:存储位置=索引

1. 两数之和

题目

给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。

思路

step1:将值和对应下标存储在哈希表中

step2:循环nums,判断target - nums[i]有没有在哈希表中,注意判断两者下标是否一致

代码

时间:O(n)

空间:O(n)

class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        '''
        思路:step1:将值和对应下标存储在哈希表中
        step2:循环nums,判断target - nums[i]有没有在哈希表中,注意判断两者下标是否一致!
        '''
        hashmap ={}
        n = len( nums)
        for i in range(n):
            hashmap[ nums[i]] = i
       
        for i in  range(n):
            k = nums[i]
            k2 = target - k
            if k2 in hashmap.keys() and i!=hashmap[k2]:

                return [i,hashmap[k2]]
      

49.字母异位词分组

题目

给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。

字母异位词 是由重新排列源单词的所有字母得到的一个新单词。

思路

step1:循环数组,alpha存储字母的单词并排序,判断alpha是否存在哈希表中,如果是,则append

**注意:**python列表不能作为哈希表的key值

代码

时间复杂度:O(nmlogm),其中 n 为 strs 的长度,m 为 strs[i] 的长度。每个字符串排序需要 O(mlogm) 的时间。我们有 n 个字符串,所以总的时间复杂度为 O(nmlogm)。

空间复杂度:O(nm),字典存储空间

class Solution:
    def groupAnagrams(self, strs: List[str]) -> List[List[str]]:
        hashmap={}
        for i in strs:
            alpha = ''.join(sorted(i))
            if alpha not in hashmap:
                hashmap[alpha]=[]
            hashmap[alpha].append(i)
        return list(hashmap.values())

128. 最长连续序列

题目

给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。

请你设计并实现时间复杂度为 O(n) 的算法解决此问题。

思路

用集合表示数组,循环集合,只需要寻找序列的初始值,找出最大序列

代码

时间:O(n)

空间:O(n)

class Solution:
    def longestConsecutive(self, nums: List[int]) -> int:
        nums_set = set(nums)
        ans = 0
        for x in nums_set:
            if x-1 in nums_set:
                continue
            y=x+1
 
            while y in nums_set:
                y=y+1
            ans = max(ans,y-x)
        return ans

总结

如果题目只针对数值有要求,适合用哈希表

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值