LeetCode 入门与攻略
1. 什么是 LeetCode?
LeetCode 是全球知名的在线编程评测系统 (Online Judge),涵盖算法、数据库、Shell、多线程等技术领域。
核心价值
- 大厂面试必考: 许多知名互联网公司(Google, Microsoft, 字节跳动, 腾讯等)面试时都会考察 LeetCode 原题或变种,通常要求手写代码并分析时间/空间复杂度。
- 提升编程内功: 通过解决高质量的算法题,可以系统性地提升数据结构与算法能力,锻炼逻辑思维。
- 技术交流社区: 这里聚集了全球的技术爱好者,可以交流解题思路、分享职业经验。
2. 新手入门指南
2.1 注册账号
访问 LeetCode 中文站 (力扣),使用手机号注册登录即可。
2.2 熟悉题库系统
- 题目标签: 题目按照知识点分类,如贪心、搜索、动态规划、链表、二叉树、哈希表等,适合专项突破。
- 题目筛选: 可以根据难度(简单/中等/困难)、状态(已解答/未解答)、通过率等条件筛选题目。
- 进度追踪: 个人主页会展示你的做题进度和活跃度,激励你持续坚持。
2.3 刷题语言选择
LeetCode 支持 C、C++、Java、Python 等多种语言。
推荐使用 Python
虽然 ACM/OI 竞赛选手偏爱 C++,但对于面试和日常练习,强烈推荐 Python。Python 语法简洁,让你能更专注于算法逻辑本身,而不是被复杂的语法细节(如内存管理、类型转换)分散精力,在面试有限的时间内能更高效地写出代码。
> "人生苦短,我用 Python。"
2.4 标准刷题流程
- 读题: 仔细阅读左侧的题目描述,理解输入输出要求及边界条件。
- 思考: 在脑海中构思解法,如果 5 分钟没思路,可以先看题解(参考下文的"5 分钟思考法")。
- 编码: 在右侧编辑器实现代码。
- 测试: 点击“执行代码”运行测试用例,修复编译错误或逻辑 Bug。
- 提交: 点击“提交”,如果不通过(如超时、内存溢出、解答错误),回到第 3 步优化代码。
3. 实战演练:第一题 (Two Sum)
题目: 1. 两数之和
给定一个整数数组
nums和一个整数目标值target。在该数组中找出和为target的两个整数,并输出这两个整数的下标。
解法一:暴力枚举
遍历所有可能的数对,检查它们的和是否等于目标值。
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
n = len(nums)
# 两层循环枚举所有组合
for i in range(n):
for j in range(i + 1, n):
if nums[i] + nums[j] == target:
return [i, j]
return []
- 时间复杂度: \(O(n^2)\) - 效率较低。
解法二:哈希表 (推荐)
利用哈希表(Python 中的字典 dict)存储遍历过的数值及其下标,实现 \(O(1)\) 的查找。
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
num_dict = {}
for i, num in enumerate(nums):
complement = target - num
# 如果补数已经在字典中,说明找到了
if complement in num_dict:
return [num_dict[complement], i]
# 存入当前数和下标
num_dict[num] = i
return []
- 时间复杂度: \(O(n)\) - 只需遍历一次,效率极高。
4. 刷题攻略与技巧
4.1 知识储备
在开始大规模刷题前,建议对以下基础有所了解:
- 数据结构: 数组、链表、栈、队列、哈希表、二叉树。
- 算法: 排序、二分查找、递归、分治、贪心、动态规划。
4.2 刷题顺序
不要按题号顺序刷!
题号顺序与难度无关。如果你从第 1 题顺着刷到位第 4 题(寻找两个正序数组的中位数,Hard),可能会直接劝退。
推荐路径:
- 起步期: 先刷「简单」难度的题目,熟悉平台和基础语法。
- 分类突破: 按照知识点模块刷题(见下文)。
- 进阶挑战: 逐步过渡到「中等」题目,这是面试的主流难度。
推荐刷题目录:
- 数组与字符串 (Array & String)
- 链表 (Linked List)
- 哈希表 (Hash Table)
- 栈与队列 (Stack & Queue)
- 二分查找 (Binary Search)
- 二叉树 (Binary Tree)
- 动态规划 (Dynamic Programming)
4.3 高效技巧
"5 分钟思考法"
如果一道题 5 分钟 内没有一点思路:
- 立刻停下来。
- 直接看题解。
- 理解逻辑。
- 自己复现代码。
不要死磕。算法往往是"会者不难",对于初学者,先模仿后创新是最高效的学习路径。
"重复刷题"
一道题做且仅做一遍是很难掌握的。不仅要多刷,还要多解(思考有没有更优解法)。
- 第一遍:理解思路,跑通代码。
- 第二遍(一周后):不看代码,独立重写。
- 第三遍(面试前):快速回顾核心思想。
"写解题报告"
尝试用自己的话把解题思路写下来。如果能清晰地讲给别人听,或者是写成博客,说明你真正掌握了这道题。这其实就是费曼学习法的应用。
下一章:coze