【LeetCode】利用哈希表求解

python的dict采用了哈希表,最低能在 O(1)时间内完成搜索。下面几道题就是利用dict来解答

 

题目1

【简单】存在重复元素

给定一个整数数组,判断是否存在重复元素。

如果任意一值在数组中出现至少两次,函数返回 true 。如果数组中每个元素都不相同,则返回 false

示例 1:

输入: [1,2,3,1]
输出: true

示例 2:

输入: [1,2,3,4]
输出: false

示例 3:

输入: [1,1,1,3,3,4,3,2,4,2]
输出: true

解答

class Solution:
    def containsDuplicate(self, nums: List[int]) -> bool:
        d = {}
        for number in nums:
            if str(number) not in d.keys():
                d[str(number)] = 1
            else:
                return True
        
        return False

题目2

【简单】两个数组的交集 II

给定两个数组,编写一个函数来计算它们的交集。

示例 1:

输入: nums1 = [1,2,2,1], nums2 = [2,2]
输出: [2,2]

示例 2:

输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出: [4,9]

说明:

    输出结果中每个元素出现的次数,应与元素在两个数组中出现的次数一致。
    我们可以不考虑输出结果的顺序。

解答

class Solution:
    def intersect(self, nums1: List[int], nums2: List[int]) -> List[int]:
        # 利用hashmap
        # 输出数组
        output = []
        # 记录一个数组中的存在的数字和对应出现的次数
        d = {}
        for num in nums1:
            d[num] = d.setdefault(num, 0) + 1

        # 遍历第二个数组,检查数字在 HashMap 中是否存在,
        # 如果存在且计数为正,则将该数字添加到答案并减少 HashMap 中的计数
        for num in nums2:
            if num in d and d[num] > 0:
                output.append(num)
                d[num] = d[num]-1
        
        return output

题目3

【简单】两数之和

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

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。

 

示例:

给定 nums = [2, 7, 11, 15], target = 9

因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]

解答

class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        if len(nums) == 2:
            return [0,1]
        # 在python中列表字典的即为哈希类型, 新建立一个空字典用来保存数值及其在列表中对应的索引
        dict1 = {}
        # 遍历一遍列表对应的时间复杂度为O(n)
        for idx in range(0, len(nums)):
            # 相减得到另一个数值
            num = target - nums[idx]
            # 如果另一个数值不在字典中,则将第一个数值及其的索引报错在字典中
            # 因为在字典中查找的时间复杂度为O(1),因此总时间复杂度为O(n) 
            if num not in dict1:
                dict1[nums[idx]] = idx
            # 如果在字典中则返回
            else:
                return [dict1[num], idx]

 

 

展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客
应支付0元
点击重新获取
扫码支付

支付成功即可阅读