跳转至

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 标准刷题流程

  1. 读题: 仔细阅读左侧的题目描述,理解输入输出要求及边界条件。
  2. 思考: 在脑海中构思解法,如果 5 分钟没思路,可以先看题解(参考下文的"5 分钟思考法")。
  3. 编码: 在右侧编辑器实现代码。
  4. 测试: 点击“执行代码”运行测试用例,修复编译错误或逻辑 Bug。
  5. 提交: 点击“提交”,如果不通过(如超时、内存溢出、解答错误),回到第 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),可能会直接劝退。

推荐路径:

  1. 起步期: 先刷「简单」难度的题目,熟悉平台和基础语法。
  2. 分类突破: 按照知识点模块刷题(见下文)。
  3. 进阶挑战: 逐步过渡到「中等」题目,这是面试的主流难度。

推荐刷题目录:

  1. 数组与字符串 (Array & String)
  2. 链表 (Linked List)
  3. 哈希表 (Hash Table)
  4. 栈与队列 (Stack & Queue)
  5. 二分查找 (Binary Search)
  6. 二叉树 (Binary Tree)
  7. 动态规划 (Dynamic Programming)

4.3 高效技巧

"5 分钟思考法"

如果一道题 5 分钟 内没有一点思路:

  1. 立刻停下来
  2. 直接看题解
  3. 理解逻辑
  4. 自己复现代码

不要死磕。算法往往是"会者不难",对于初学者,先模仿后创新是最高效的学习路径。

"重复刷题"

一道题做且仅做一遍是很难掌握的。不仅要多刷,还要多解(思考有没有更优解法)。

  • 第一遍:理解思路,跑通代码。
  • 第二遍(一周后):不看代码,独立重写。
  • 第三遍(面试前):快速回顾核心思想。

"写解题报告"

尝试用自己的话把解题思路写下来。如果能清晰地讲给别人听,或者是写成博客,说明你真正掌握了这道题。这其实就是费曼学习法的应用。

下一章:coze