进阶
LeetCode 小技巧
复杂度、交换、无穷大、常用写法
时间复杂度要记的
- list:按下标访问 O(1),
append/pop()O(1),pop(0)/insert(0, x)O(n) - dict / set:查找、插入、删除平均 O(1)
- deque:两端
append/popleft都是 O(1),BFS 用 deque 别用 list 当队列 - heapq:
heappush/heappopO(log n),堆顶 O(1) - list 的 in:O(n);set/dict 的 in:O(1)
加载代码编辑器中…
无穷大与初始最值
求最小值初始成 float('inf') 或 math.inf,求最大值初始成 -float('inf')。
加载代码编辑器中…
交换、多重赋值、解包
加载代码编辑器中…
边界与下标
- 左闭右开:
range(n)是 0..n-1,nums[i:j]是 i 到 j-1 - 负下标:
-1是最后一个,-2是倒数第二个 - 空:
if not lst判断空列表,if not s判断空字符串
加载代码编辑器中…
二维列表初始化
不要用 [[0]*n]*m,每行会是同一个引用;用列表推导式。
加载代码编辑器中…
调试
LeetCode 本地调试时常用 print 看变量;线上用「调试」面板或打日志。
加载代码编辑器中…