news 2026/4/17 5:57:16

新手leetcode快速刷题指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
新手leetcode快速刷题指南

新手leetcode快速刷题指南

  • 前言:
  • 我们的新手LeetCode刷题入门指南:
  • python基础语法与数据结构
    • 🧩 一、Python 基础语法概览
    • 🧮 二、数据类型(核心:list、dict、str)
    • 🔁 三、控制结构(逻辑与循环)
    • 🧰 四、函数(刷题常用模板)
      • 🧩 四点五、函数参数怎么传?
    • 🧮 五、return
      • 补充说明pass
    • 🧩 六、列表推导式(Python简洁写法)
    • 🔧 七、常用内置函数
    • 🔤 八、字符串操作(常考!)
    • 🧮 九、常用库(刷题只需了解)
  • leetcode刷题通用解题流程:
    • 1. 最实用的 5 步:
    • 2. 🥉常用算法分类
    • 3. 🧠 刷题最常用的 8 个 Python 小技巧
      • 1)复杂度(先会这三句就能选方法)
      • 2)排序怎么写(LeetCode 高频)
      • 3)哈希表计数(不用写 if)
      • 4)队列 BFS(树/图最常用)
      • 5)TopK / “总拿最小的那个”(用堆)
      • 6)二分(找“左边界/插入位置”)
      • 7)递归记忆化(避免重复计算,DP/搜索常用)
      • 8)list 的拷贝(刷题很常用)
    • 题型模板区(直接抄)
    • 1)哈希表模板(Two Sum 类)
    • 2)双指针模板(有序数组/左右夹逼)
    • 3)滑动窗口模板(最长/最短子数组)
    • 4)栈模板(有效括号)
    • 5)BFS 队列模板(最短路径/层序遍历)
    • 6)二分模板(找左边界)
    • 7)回溯模板(子集/组合)
    • 8)DP 模板(爬楼梯)
  • 如何在本地编译测试 LeetCode 代码
    • 1)站内模板(LeetCode)
    • 2)本地模板(使用断言)
    • 3)本地示例:Two Sum(哈希表)
  • 4) 如何自己设计测试样例?

前言:

我们现在准备刷题了,时间紧、任务重,希望快速上手。只学对刷题最有用的 20% Python 知识,先能写题、跑通、过样例,再逐步变强。

首先我们刷题前要知道的

  • 我们在 LeetCode 写的 Python算法题,绝大多数都是:
    用 list/dict(数组/哈希表)+ 循环 + if,配合几个常用库(collections / heapq / bisect / functools)和固定模板(双指针/栈/队列/BFS/二分/回溯/DP)就能解决:

然后开始我们的新手LeetCode刷题入门指南。

我们的新手LeetCode刷题入门指南:

python基础语法与数据结构

  1. 数据类型int,float,str,list,dict,set,tuple
  2. 控制结构if/else,for,while
  3. 函数:定义def, 参数与返回值
  4. 列表推导式(简洁写法)
  5. 常见内置函数len,sum,max,min,sorted,enumerate,zip
  6. 字符串操作split,join,strip,replace
  7. 常用库(入门阶段先知道即可):collections,math

🧩 一、Python 基础语法概览

模块要掌握的知识关键语法举例对刷题的帮助
变量与类型不需要声明类型,直接赋值即可a = 10b = "hi"x = 3.14name = "Alice"编程更快,不用int/char定义
输入输出input()读入字符串;print()输出s = input()print(x)print("答案:", ans)用来调试或输出结果
注释单行用#,多行用三引号# 这是注释'''多行注释'''写题解说明、调试
缩进控制代码块,无大括号{}if x>0:\n print(x)必须保持统一(常为4空格)

🧮 二、数据类型(核心:list、dict、str)

类型定义方式常用操作示例刷题用途
int / floata = 10b = 3.14+ - * / // %5 // 2 -> 2(整除)计数、取模、循环控制
str(字符串)'abc'"abc"s[i]取字符;len(s)长度"abc"[1] -> 'b'处理文本、回文串
list(列表)[1, 2, 3]append(x)pop()len(),切片a[1:3]nums = [1,2,3]; nums.append(4)最常用容器!
dict(字典/哈希表){"a":1, "b":2}d["a"]取值;d.keys()d.get("x",0)cnt = {"a":1}cnt["a"]+=1高频题结构(Two Sum)
set(集合){1,2,3}add(x)remove(x)in判断s = {1,2}; 3 in s -> False去重、判断是否出现
tuple(元组)(1,2,3)不可修改,用于返回多个值return (x, y)函数多返回值、排序key

🔁 三、控制结构(逻辑与循环)

结构Python写法示例说明
if / elif / elseif 条件:if x>0:\n print("正")\nelif x==0:\n print("零")\nelse:\n print("负")注意冒号:和缩进
for循环for 变量 in 序列:for i in range(5): print(i)range(n)表示0到n-1
while循环while 条件:while n>0:\n n-=1同C语言逻辑
break / continue同C语言if i==3: break控制循环流
for…else(特殊)循环正常结束后执行else搜索时常用不掌握也行,了解即可

🧰 四、函数(刷题常用模板)

内容语法示例说明
定义函数def 函数名(参数):def add(a,b): return a+b没有类型声明
返回值returnreturn x, y可返回多个值
默认参数def f(x=0): ...f()=f(0)常用在递归中
匿名函数lambda x: x+1map(lambda x:x+1, arr)列表排序、函数式操作

🧩 四点五、函数参数怎么传?

Python 传参基本就是“传对象的引用”。
关键是:

  • int/str/tuple不可变对象:函数里改它,外面不变。
  • list/dict/set可变对象:函数里改内容,外面会变。

常见错误1:不要用可变对象当默认参数(可变对象默认参数正确写法)

❌ 错误做法:

deff(path=[]):path.append(1)returnpath
  • 默认参数path=[]在函数定义时初始化一次,之后每次函数调用都使用这个初始生成的同一个列表

✅ 正确做法:

deff(path=None):ifpathisNone:path=[]path.append(1)returnpath
  • 使用None作为默认值,每次函数调用时都会创建一个新的空列表。
  • 避免了默认参数值被共享的问题,每次调用都返回一个独立的列表。

常见错误2:回溯/DFS里要用path[:]等浅拷贝
因为path是 list(可变),你要“存档一份当时的快照”,就得拷贝:

ans=[]path=[]defdfs(i):ifi==3:ans.append(path[:])# 关键:拷贝一份returnpath.append(i)dfs(i+1)path.pop()dfs(0)print(ans)

(这里可以看一下我们上一篇的帖子,了解一下常见的直接赋值,浅拷贝,深拷贝的错误和理解。)

🧮 五、return

目的写法例子
返回单个值return valuereturn "ok"
返回多个值return a, b, creturn q, r
返回列表return [ ... ]return [i, j]
返回字典return { ... }return {"a":1,"b":2}
不返回/占位return或省略return(等价None

补充说明pass

如果你的函数暂时不需要写什么内容,可以补充一个pass当占位符

  • pass语句:用于语法上需要语句但什么也不做的场景(如函数、类、循环的占位),例如:
    deftodo():pass# 暂时不写实现ifcondition:pass# 稍后处理

🧩 六、列表推导式(Python简洁写法)

功能语法示例说明
创建列表[表达式 for 变量 in 序列][i*i for i in range(5)] → [0,1,4,9,16]简洁、常用
带条件[x for x in nums if x>0][x for x in [1,-2,3] if x>0] → [1,3]常用于过滤

💡刷题常见用法:

nums=[int(x)forxininput().split()]

(把输入的一行数字变成整型数组)


🔧 七、常用内置函数

函数用法示例常见用途
len()求长度len(nums)数组、字符串长度
sum()求和sum(nums)快速统计
max() / min()最大/最小max(nums)
sorted()排序sorted(nums, reverse=True)
enumerate()获取下标和值for i, val in enumerate(nums):常用于遍历
zip()打包多个序列for a,b in zip(nums1,nums2):同步遍历两个数组
any()任一为真any(x<0 for x in nums)条件判断
all()全部为真all(x>=0 for x in nums)条件判断

🔤 八、字符串操作(常考!)

操作用法示例说明
split()按空格拆分字符串"a b c".split()['a','b','c']输入解析
join()合并列表为字符串",".join(['a','b'])"a,b"输出格式化
strip()去掉首尾空白" abc ".strip()"abc"
replace()替换子串"aba".replace('a','x')"xbx"
切片s[l:r]"abcd"[1:3]="bc"子串

🧮 九、常用库(刷题只需了解)

库/工具一句话核心功能(新手友好版)最简示例(可以直接抄)常用场景
math常用数学计算(平方根、向上取整、最大公约数等)math.sqrt(x)
math.ceil(x)
math.gcd(a,b)
数论、几何、计算题
collections.Counter统计列表元素出现次数cnt = Counter(nums)频次统计、词频分析
collections.defaultdict访问不存在的键时自动初始化默认值d = defaultdict(list)
d[key].append(val)
分组统计、邻接表
collections.deque双端队列:头尾都能快速增删q = deque([1,2])
q.append(3); q.popleft()
BFS、滑动窗口
heapq最小堆:随时获取最小值heappush(h, x)
min_val = heappop(h)
TopK、合并有序列表
bisect二分查找:在有序列表中找插入位置pos = bisect_left(arr, x)二分搜索边界
functools.lru_cache记忆化装饰器:缓存递归结果@lru_cache(maxsize=None)递归DP、记忆化搜索

leetcode刷题通用解题流程:

1. 最实用的 5 步:

  1. 读题 + 确认输入输出(是否有序?允许重复?范围?)
  2. 选方法(哈希/双指针/栈/队列/BFS/二分/回溯/DP…)
  3. 估复杂度(目标一般 O(n) 或 O(n log n))
  4. 写代码(先写最小可行版本跑通样例)
  5. 测边界(空、单元素、极端、重复、负数/特殊字符)

2. 🥉常用算法分类

目标:能分析时间复杂度、选择合适的数据结构解题。

目标:能看出题目属于哪一类,直接套模板。

  1. 哈希表
  2. 双指针 / 滑动窗口
  3. 队列 / BFS
  4. 二分查找
  5. 递归 / 回溯
  6. 动态规划(DP)
  7. 堆(TopK/最小最大)

3. 🧠 刷题最常用的 8 个 Python 小技巧

1)复杂度(先会这三句就能选方法)

  • 扫一遍数组:通常O(n)
  • 排序:通常O(n log n)
  • 双重循环:通常O(n^2)(n 大会超时)

2)排序怎么写(LeetCode 高频)

a.sort()# 升序a.sort(reverse=True)# 降序a.sort(key=lambdax:x[1])# 按第2个元素排序(二维数组/区间)

3)哈希表计数(不用写 if)

fromcollectionsimportdefaultdict cnt=defaultdict(int)forxinnums:cnt[x]+=1

4)队列 BFS(树/图最常用)

fromcollectionsimportdeque q=deque([start])whileq:cur=q.popleft()

5)TopK / “总拿最小的那个”(用堆)

importheapq h=[]heapq.heappush(h,3)heapq.heappush(h,1)x=heapq.heappop(h)# 1(最小的先出来)

6)二分(找“左边界/插入位置”)

frombisectimportbisect_left i=bisect_left([1,2,4,4,7],4)# i == 2

7)递归记忆化(避免重复计算,DP/搜索常用)

fromfunctoolsimportlru_cache@lru_cache(None)deff(i):ifi<=1:return1returnf(i-1)+f(i-2)

8)list 的拷贝(刷题很常用)

b=a[:]# 拷贝一份(避免一起变)# ans.append(path[:]) 也是同样道理

题型模板区(直接抄)

1)哈希表模板(Two Sum 类)

classSolution:deftwoSum(self,nums,target):pos={}fori,xinenumerate(nums):y=target-xifyinpos:return[pos[y],i]pos[x]=ireturn[]

2)双指针模板(有序数组/左右夹逼)

classSolution:deftwoSumSorted(self,nums,target):l,r=0,len(nums)-1whilel<r:s=nums[l]+nums[r]ifs==target:return[l,r]elifs<target:l+=1else:r-=1return[-1,-1]

3)滑动窗口模板(最长/最短子数组)

classSolution:defminSubArrayLen(self,target,nums):n=len(nums)l=0s=0ans=float('inf')forrinrange(n):s+=nums[r]whiles>=target:ans=min(ans,r-l+1)s-=nums[l]l+=1return0ifans==float('inf')elseans

4)栈模板(有效括号)

classSolution:defisValid(self,s:str)->bool:pair={')':'(',']':'[','}':'{'}st=[]forchins:ifchin"([{":st.append(ch)else:ifnotstorst[-1]!=pair.get(ch,'#'):returnFalsest.pop()returnnotst

5)BFS 队列模板(最短路径/层序遍历)

fromcollectionsimportdequeclassSolution:defbfs(self,start):q=deque([start])visited=set([start])whileq:cur=q.popleft()# 处理 curfornxtin[]:# 这里替换成邻居列表ifnxtnotinvisited:visited.add(nxt)q.append(nxt)

6)二分模板(找左边界)

classSolution:deflowerBound(self,nums,target):l,r=0,len(nums)# 注意 r = len(nums)whilel<r:mid=(l+r)//2ifnums[mid]>=target:r=midelse:l=mid+1returnl

7)回溯模板(子集/组合)

classSolution:defsubsets(self,nums):ans=[]path=[]defdfs(i):ifi==len(nums):ans.append(path[:])# 拷贝快照return# 不选dfs(i+1)# 选path.append(nums[i])dfs(i+1)path.pop()dfs(0)returnans

8)DP 模板(爬楼梯)

classSolution:defclimbStairs(self,n:int)->int:ifn<=2:returnn a,b=1,2for_inrange(3,n+1):a,b=b,a+breturnb

如何在本地编译测试 LeetCode 代码

1)站内模板(LeetCode)

classSolution:defyourMethod(self,...):# 1) 参数检查(可选)# 2) 初始化# 3) 主循环 / 递归# 4) 返回结果pass

2)本地模板(使用断言)

classSolution:defyourMethod(self,param1,param2):# 你的方法实现passdeftest_your_method():s=Solution()asserts.yourMethod(param1,param2)=="expected_value"if__name__=="__main__":test_your_method()print("All tests passed.")

3)本地示例:Two Sum(哈希表)

  • LeetCode 页面有「自定义测试用例」输入框,直接贴 JSON 风格输入即可。

  • 例如 Two Sum:

    • 输入:

      [2,7,11,15] 9 ……
  • 本地使用断言测试时,把这些样例输入我们创建的方法入口中

classSolution:deftwoSum(self,nums,target):pos={}fori,xinenumerate(nums):y=target-xifyinpos:return[pos[y],i]pos[x]=ireturn[]deftest_two_sum():s=Solution()asserts.twoSum([2,7,11,15],9)==[0,1]asserts.twoSum([3,3],6)==[0,1]asserts.twoSum([-1,-2,-3,-4,-5],-8)==[2,4]if__name__=="__main__":test_two_sum()print("All tests passed.")

4) 如何自己设计测试样例?

口诀:空、单元素、极端、重复、负数/特殊字符

题型必备样例说明/目的
数组查找/哈希正常用例;重复元素负数目标不存在/多解(看题目是否保证有解)覆盖哈希查找的关键分支
双指针/滑窗已排序 & 未排序;窗口极小/极大全不满足/全满足检查左右边界更新是否正确
字符串空串;单字符;大小写混合;含空格或标点;Unicode(了解即可)检验遍历与条件过滤
栈/队列合法序列;非法但长度接近;嵌套深度很深易错在出栈时机与匹配
二分目标在头/尾;不存在;全相等;有重复的最左/最右检查 mid & 边界收缩
动态规划n=0/1 的最小规模;最大规模;边界转移(如 0/负数)检验初值与转移式
链表空链;单节点;环/无环(看题);头尾操作指针移动与返回头结点
空树;单节点;只有左/右子树;完全/不完全递归 base case 是否健壮
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/15 18:41:26

团队层级划分与角色定义

团队的层级划分与角色定义&#xff0c;是组织设计的两大基石&#xff0c;两者协同作用以确保高效运作。层级划分&#xff08;Hierarchy&#xff09;主要为了解决“规模”和“复杂性”问题&#xff0c;它建立了指挥、汇报和决策的“纵向”路径&#xff1b;而角色定义&#xff08…

作者头像 李华
网站建设 2026/4/7 16:19:11

Dify智能体平台对接Qwen-Image-Edit-2509实现低代码图像生成应用

Dify智能体平台对接Qwen-Image-Edit-2509实现低代码图像生成应用 在电商运营的日常工作中&#xff0c;设计师常常需要为同一款商品制作十几种不同背景、颜色或文案的宣传图。过去&#xff0c;这意味著打开Photoshop&#xff0c;手动调整图层、重排文字、反复比对色彩——一张图…

作者头像 李华
网站建设 2026/4/11 22:30:22

Cangaroo CAN总线分析工具实战应用指南

Cangaroo CAN总线分析工具实战应用指南 【免费下载链接】cangaroo 项目地址: https://gitcode.com/gh_mirrors/ca/cangaroo 在汽车电子和工业控制领域&#xff0c;CAN总线分析是工程师日常开发调试的关键环节。Cangaroo作为一款功能全面的开源CAN总线分析软件&#xff…

作者头像 李华
网站建设 2026/4/15 17:33:34

终极指南:5分钟实现Vue项目Office文件在线预览

终极指南&#xff1a;5分钟实现Vue项目Office文件在线预览 【免费下载链接】vue-office 项目地址: https://gitcode.com/gh_mirrors/vu/vue-office 想在Vue项目中快速集成Word、Excel和PDF文件的在线预览功能吗&#xff1f;无需复杂配置和后端支持&#xff0c;Vue-Offi…

作者头像 李华
网站建设 2026/4/15 18:57:48

Transformers模型详解:Qwen3-VL-8B的位置编码机制研究

Qwen3-VL-8B 多模态位置编码深度解析&#xff1a;从设计到落地 在当前多模态AI迅猛发展的背景下&#xff0c;如何让模型真正“看懂”图像并“理解”文本之间的空间与语义关系&#xff0c;成为视觉-语言任务的核心挑战。以图文检索、视觉问答&#xff08;VQA&#xff09;和图像描…

作者头像 李华