Python刷题语法速查手册AI
互联网企业技术面试 · LeetCode 知识点全覆盖
目录
- 基础数据类型
- 列表 List
- 字符串 String
- 字典 Dict
- 集合 Set
- 元组 Tuple
- 双端队列 deque
- 堆 heapq
- 排序
- 二分查找 bisect
- Counter & defaultdict & OrderedDict
- 递归与回溯
- 动态规划常用写法
- 位运算
- 数学运算
- 迭代器与生成器
- 链表节点 / 树节点定义
- 图的表示与遍历
- 常用内置函数
- 复杂度速记表
- ACM 输入输出(笔试模式)
- 附录:高频面试题对应知识点索引
基础数据类型
1 | # 整数无限精度,无需担心溢出 |
列表 List
1 | # 初始化 |
字符串 String
1 | s = "Hello, World!" |
字典 Dict
1 | # 初始化 |
集合 Set
1 | # 初始化(注意:{} 是空字典,空集合用 set()) |
元组 Tuple
1 | # 元组不可变,可以作字典 key |
双端队列 deque
1 | from collections import deque |
堆 heapq
1 | import heapq |
排序
1 | # sorted():返回新列表,不改变原列表 |
二分查找 bisect
1 | import bisect |
Counter & defaultdict & OrderedDict
1 | from collections import Counter, defaultdict, OrderedDict |
递归与回溯
1 | import sys |
动态规划常用写法
1 | # ── 一维 DP ────────────────────────────────────── |
位运算
1 | # 基础运算 |
数学运算
1 | import math |
迭代器与生成器
1 | # enumerate:带索引遍历 |
链表节点 / 树节点定义
1 | # ── 链表节点 ────────────────────────────────────── |
图的表示与遍历
1 | from collections import defaultdict, deque |
常用内置函数
1 | # 输入输出 |
复杂度速记表
| 数据结构 / 操作 | 时间复杂度 | 备注 |
|---|---|---|
| 列表 append/pop | O(1) 均摊 | pop(0) 是 O(n) |
| 列表 insert/remove | O(n) | |
| 列表 index (in) | O(n) | |
| 字典 get/set/del | O(1) 均摊 | |
| 集合 add/remove/in | O(1) 均摊 | |
| deque 两端操作 | O(1) | 中间操作 O(n) |
| heapq push/pop | O(log n) | |
| heapq heapify | O(n) | |
| sorted / sort | O(n log n) | Timsort |
| bisect | O(log n) | 要求有序 |
| 字符串拼接 (+=) | O(n²) 累计 | 用 join 代替 |
| “”.join(list) | O(n) |
| 算法 | 时间复杂度 | 空间复杂度 |
|---|---|---|
| 二分查找 | O(log n) | O(1) |
| BFS / DFS | O(V+E) | O(V) |
| 拓扑排序 | O(V+E) | O(V) |
| 并查集(路径压缩+秩) | O(α(n)) ≈ O(1) | O(n) |
| 快速排序 | O(n log n) 均摊 | O(log n) |
| 归并排序 | O(n log n) | O(n) |
| 动态规划(一维) | O(n) | O(n) / O(1) 滚动 |
| 动态规划(二维) | O(mn) | O(mn) / O(n) 滚动 |
ACM 输入输出(笔试模式)
目标:把 LeetCode 风格代码,快速改成 ACM 模式(标准输入/标准输出)。
ACM 模式是什么
- 输入:从标准输入读取(
input()/sys.stdin) - 输出:打印到标准输出(
print()) - 不再有平台给定函数签名,需要自己写
solve()
通用结构:
1 | def solve(): |
常见输入格式模板
单组输入:
1 | n = int(input().strip()) |
多组输入(第一行给组数 T):
1 | T = int(input().strip()) |
多组输入(直到 EOF):
1 | while True: |
n 行矩阵输入:
1 | n, m = map(int, input().split()) |
字符串输入:
1 | s = input().strip() |
大数据量高性能输入
按 token 读取(sys.stdin.read):
1 | import sys |
按行读取(sys.stdin):
1 | import sys |
输出与改写注意点
- 多个答案逐行
print(ans) - 不要输出多余提示文字(如“结果是:”)
- 题目要求空格分隔时:
1 | arr = [1, 2, 3] |
LeetCode -> ACM 改写步骤:
- 把函数参数改为“从输入读取”
- 把
return改为print - 多组数据时套循环(
T组或直到EOF)
一份可直接开写的 ACM 模板
1 | import sys |
常见坑
input()返回字符串,做数值运算前要int()/map(int, ...)split()默认按任意空白分割(空格、\t)- 建议对整行输入先
strip(),减少首尾空白影响 EOF题型建议用try/except EOFError- 不要用
sum、min、max当变量名,避免覆盖内置函数
附录:高频面试题对应知识点索引
| 题型 | 核心知识点 |
|---|---|
| 两数之和 / 哈希映射 | dict.get(), in dict |
| 滑动窗口 | deque, 双指针, Counter |
| 二叉树 | TreeNode, 递归, BFS层序 |
| 链表操作 | ListNode, 虚拟头节点, 双指针 |
| 图遍历 / 连通分量 | defaultdict(list), BFS/DFS, 并查集 |
| 前缀和 / 差分 | accumulate, list |
| 单调栈 | list 作栈, stack[-1] |
| 堆 / 优先队列 | heapq, 最大堆取负 |
| 字符串处理 | Counter, split/join, ord/chr |
| 回溯 / 排列组合 | 递归模板, path.append/pop |
| 动态规划 | @cache, 滚动数组, 背包 |
| 位运算技巧 | n&(n-1), xor, 状压 |
| 数学 / 快速幂 | pow(a,b,mod), math.gcd |
| 二分查找 | bisect, 手写左右边界模板 |
版本说明:本文基于 Python 3.9+,部分语法(如
@cache、math.lcm、math.comb)需 3.8/3.9 以上版本。LeetCode 平台默认支持 Python 3.11+,可放心使用所有特性。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 AlanW Mountain!