hot-100刷题笔记

1.哈希

1.1 两数之和

1. 两数之和 - 力扣(LeetCode)

方法1:暴力解

使用暴力解思想,通过两个 for 循环拿下

代码如下:

复制代码
class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        length = len(nums)
        for i in range(length):
            for j in range(i+1,length):
                if nums[i]+nums[j] == target:
                    return [i,j]
        return False

方法2:哈希表

以空间换时间:通过构建哈希表来实现快速查找

算法如下:

目标:找到两个数 a + b = target 等价变形:b = target - b

遍历到当前数字 num 的时候:

  1. 需要的另一半数字**:**need = target - num
  2. 去哈希表里查:need 之前有没有出现过?
    • ✅存在:之前遍历的时候已经存过 need,那 need 的下标和当前 idx 就是答案,直接返回
    • ❌不存在:把当前 num 和它的下标存入哈希表,继续往后遍历

1代码如下:

复制代码
class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        hash = {}  # key:数组元素,value:元素对应的下标
        for idx, num in enumerate(nums):  # 遍历数组,获取下标和元素
            need = target - num   # 我们需要找的另一半数字
            if need in hash:
                # 哈希表里找到了另一半,直接返回两个下标
                return [hash[need], idx]
            # 没找到,就把当前数字存入哈希表,留给后面的元素配对
            hash[num] = idx
        return []
1.enumerate()函数详解

enumerate():是 Python 内置函数,作用是:同时拿到可迭代对象的 索引+元素

语法:

复制代码
enumerate(可迭代对象, start=0)
  • 返回值:
    • 索引(默认从0开始)
    • 索引指向的元素
  • start:可选,下标起始数字

1.2 字母异位词分组

49. 字母异位词分组 - 力扣(LeetCode)

思想:互为字母异位词的字符串,**按字母顺序排序之后得到的字符串一定完全相同;**例:

  • eat → 排序:aet
  • tea → 排序:aet
  • ate → 排序:aet

所以:排序后的字符串,作为哈希表的 key哈希表 value 存原始字符串列表; key 相同的原始字符串,就是同一组字母异位词。

代码如下:1.

复制代码
#1.导入collections模块
import collections

class Solution:
    def groupAnagrams(self, strs: List[str]) -> List[List[str]]:
        #2. 定义特殊字典
        mp = collections.defaultdict(list)
        #3. 遍历字符串列表
        for st in strs:
            #3.1 获得重排序后的字符串
            key = "".join(sorted(st))
            #3.2 原字符串追加
            mp[key].append(st)

        # mp.values() 取出所有分组的列表,转成list返回
        return list(mp.values())
1.collections.defaultdict()详解

defaultdict :Python collections 模块提供的字典子类

defaultdict字典子类的特殊性: 普通字典访问不存在的键会抛出 KeyError; defaultdict 在读取不存在的 key 时,会自动调用传入的工厂函数,生成一个默认值赋值给这个 key

工厂函数:list / int / str / set 这类,不带参数调用就能生成对象

语法如下:

复制代码
from collections import defaultdict
d = defaultdict(工厂函数)
2.sorted()函数详解

sorted() : Python 内置全局函数; 作用:对可迭代对象排序,返回新的列表,不会修改原对象

注意:字符串 st 属于可迭代对象,sorted(st) 会把字符串拆成单个字符,按 Unicode 编码从小到大排序

语法如下:

复制代码
st = "tea"
res = sorted(st)
print(res)
# 输出:['a', 'e', 't']
3.join()函数详解

join() :**字符串的实例方法;**作用:将一个可迭代对象里的全部字符串元素,用调用者字符串作为分隔符拼接成一个新字符串

语法如下:

复制代码
separator.join(iterable)
  • separator:分隔符 (字符串,可以是空串""、逗号","、横杠"-"等)
  • iterator:可迭代对象 (列表、元组、集合、生成器等),里面每一项都必须是字符串
  • 返回值 :拼接完成的新字符串
相关推荐
dtq04241 小时前
数据结构 - 栈
c语言·数据结构·学习
三岁就很~酷~1 小时前
ai开发 python+claudecode环境搭建
python·ai编程
赵钰老师1 小时前
基于ArcGIS Pro、R、INVEST等多技术融合下生态系统服务权衡与协同动态分析
python·arcgis·数据分析·r语言
言乐61 小时前
Python:用AES-GCM算法加密链接内容,并生成可分享的加密链接和解密工具
python·django·virtualenv·pygame·tornado
小静AI工程实验室1 小时前
Claude Code 实用教程:Windows、macOS、Linux 从安装到项目调试与验收
人工智能·python·开发工具·claude code
淡海水1 小时前
12-02-性能-数据结构性能调查案例1-5
数据结构·性能优化·c#
OKkankan2 小时前
Python常用容器与导入语法详解(二)
数据结构·python
维基框架2 小时前
坊间传闻 OpenAI 将要发布GPT-6 Sol 模型
人工智能·pytorch·python
Cccp.1232 小时前
【leetcode】(六) 图和贪心算法
数据结构·算法·leetcode