【力扣-1.两数之和】Python笔记

10 阅读2分钟

一、哈希表(字典)基础操作

哈希表(dict)是 Python 中以键 - 值(key-value)对形式存储数据的容器,具有存储不重复的键有序(Python 3.7+)可变等特性。

hash_table = {"name": "张三"} 
hash_table["gender"] = "男" # 直接赋值新增键值对

del hash_table["name"] # 删除指定key 
hash_table.pop("name") # 删除并返回对应value

hash_table["name"] = "李四" # key存在时,赋值就是更新

print(hash_table["name"]) # 直接访问key,不存在会报错
hash_table.get("name") # key不存在,返回默认None 
hash_table.get("age", 180) # key不存在,返回默认值180

二、经典算法题:两数之和(LeetCode 1)

题目描述

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

暴力解法(时间 O (n²),空间 O (1))

双重循环枚举所有可能的数对,判断和是否等于 target

哈希表解法(时间 O (n),空间 O (n))

核心思路:遍历数组时,用哈希表存储已访问元素的值 - 下标映射,对当前元素 num,直接查找 target - num 是否在哈希表中,若存在则返回结果。

class Solution: 
    def twoSum(self, nums: list[int], target: int) -> list[int]:
        hash_table = {} # 初始化哈希表 
        # 遍历数组,同时获取下标和元素值 
        for i, num in enumerate(nums): 
            complement = target - num # 计算待找的补数 
            if complement in hash_table: 
                # 补数在哈希表中,直接返回结果 
                return [hash_table[complement], i] 
            # 补数不在表中,将当前元素和下标存入哈希表 
            hash_table[num] = i 
         return []

关键知识点

  • enumerate(nums):同时返回元素的下标元素值
  • 哈希表查找操作时间复杂度为 O (1),因此整体时间复杂度优化为 O (n)。
  • 注意:在哈希表中存储已遍历元素,避免使用同一元素两次。
类型特性有序性可变性
字典(dict)键 - 值对存储Python 3.7+ 有序可变
集合(set)存储不重复元素无序可变
列表(list)有序可变序列有序可变
元组(tuple)有序不可变序列有序不可变