PyCraft
进阶

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 当队列
  • heapqheappush/heappop O(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 看变量;线上用「调试」面板或打日志。

加载代码编辑器中…