个人待刷题清单

103 阅读28分钟

按照面试概率从高到低进行排列如下:

codeTop

数组和字符串操作codeTop

  1. Two Sum (两数之和)
  2. Valid Palindrome (验证回文字符串)
  3. Reverse String (反转字符串)
  4. Rotate Image (旋转图像)
  5. Contains Duplicate (存在重复元素)
  6. Move Zeroes (移动零)
  7. K Closest Points to Origin (最接近原点的 K 个点)
  8. String to Integer (atoi) (字符串转换整数 (atoi))
  9. Implement strStr() (实现 strStr() 函数)
  10. First Unique Character in a String (字符串中的第一个唯一字符)

链表

  1. Add Two Numbers (两数相加)
  2. Reverse Linked List (反转链表)
  3. Merge Two Sorted Lists (合并两个有序链表)
  4. Intersection of Two Linked Lists (两个链表的交点)
  5. Remove Nth Node From End of List (删除链表的倒数第N个节点)

哈希表/映射

数组/字符串

树和图

  1. Binary Tree Level Order Traversal (二叉树的层序遍历)
  2. Maximum Depth of Binary Tree (二叉树的最大深度)
  3. Clone Graph (克隆图)
  4. Symmetric Tree (对称二叉树)
  5. Balanced Binary Tree (平衡二叉树)
  6. Number of Connected Components in an Undirected Graph (无向图中的连通分量的数目)
  7. Serialize and Deserialize BST (序列化和反序列化二叉搜索树)

动态规划

  1. Climbing Stairs (爬楼梯)
  2. Best Time to Buy and Sell Stock (买卖股票的最佳时机)
  3. Coin Change (零钱兑换)

设计

  1. LRU Cache (LRU 缓存机制)
  2. Find Median from Data Stream (数据流的中位数)
  3. Design Twitter (设计推特)
  4. Design Search Autocomplete System (设计搜索自动补全系统)
  5. Design HashSet (设计哈希集合)
  6. Design Circular Queue (设计循环队列)
  7. Design Hit Counter (设计点击计数器)
  8. Design Linked List (设计链表)
  9. Design Circular Deque (设计循环双端队列)
  10. Design a Leaderboard (设计排行榜)
  11. Design In-Memory File System (设计内存文件系统)
  12. All O'one Data Structure (全 O(1) 的数据结构)

并发与多线程

  1. Fizz Buzz Multithreaded (多线程的 Fizz Buzz)
  2. Building H2O (构建 H2O)

其他相关概念

  1. Moving Average from Data Stream (数据流中的移动平均值)
  2. Implement Trie (Prefix Tree) (实现 Trie (前缀树))
  3. Flatten 2D Vector (扁平化二维向量)
  4. Range Sum Query 2D - Mutable (二维区域和检索 - 可变)
  5. Sliding Window Maximum (滑动窗口最大值)
  6. Random Pick with Weight (按权重随机选择)
  7. Implement Rand10() Using Rand7() (用 Rand7() 实现 Rand10())
  8. Count of Smaller Numbers After Self (计算右侧小于当前元素的个数)
  9. Find K Pairs with Smallest Sums (查找和最小的 K 对数字)
  10. Logger Rate Limiter (日志速率限制器)
  11. Stream of Characters (字符流)
  12. LFU Cache (LFU 缓存)
  13. Insert Delete GetRandom O(1) (常数时间插入、删除和获取随机元素)
  14. Maximum Size Subarray Sum Equals k (和为 k 的最长子数组长度)
  15. My Calendar I, II, III (我的日程安排 I, II, III)
  16. Time Based Key-Value Store (基于时间的键值存储)
  17. Word Search II (单词搜索 II)

栈/队列

二叉树

数学/算法

其他

分类总结:

数组和字符串操作

  1. Two Sum (两数之和)

    • 锻炼能力: 数组操作,哈希表的使用。
    • 实际使用场景: 在购物车、订单处理等场景中,可能需要从多个项目中找出总价匹配特定金额的组合。
    • 面试概率:
  2. Valid Palindrome (验证回文字符串)

    • 锻炼能力: 字符串操作,双指针技巧。
    • 实际使用场景: 文本处理,如搜索、广告系统等场合。
    • 面试概率:
  3. Reverse String (反转字符串)

    • 锻炼能力: 字符串操作。
    • 实际使用场景: 输入预测、自动纠错等文本处理场景。
    • 面试概率:
  4. Rotate Image (旋转图像)

    • 锻炼能力: 多维数组操作。
    • 实际使用场景: 图像处理、游戏开发。
    • 面试概率:
  5. Contains Duplicate (存在重复元素)

    • 锻炼能力: 数组操作,哈希表。
    • 实际使用场景: 数据去重,如联系人列表、图片库等。
    • 面试概率:
  6. Move Zeroes (移动零)

    • 锻炼能力: 数组操作。
    • 实际使用场景: 数据清洗,如删除无效数据。
    • 面试概率:
  7. K Closest Points to Origin (最接近原点的 K 个点)

    • 锻炼能力: 数组操作,排序,优先队列。
    • 实际使用场景: 地图应用中的位置排序、推荐系统。
    • 面试概率:
  8. String to Integer (atoi) (字符串转换整数 (atoi))

    • 锻炼能力: 字符串操作,状态机。
    • 实际使用场景: 用户输入处理,文本转换。
    • 面试概率:
  9. Implement strStr() (实现 strStr() 函数)

    • 锻炼能力: 字符串操作,滑动窗口,KMP。
    • 实际使用场景: 文本搜索、高亮显示。
    • 面试概率:
  10. First Unique Character in a String (字符串中的第一个唯一字符)

  • 锻炼能力: 字符串操作,哈希表。
  • 实际使用场景: 文本处理,如拼写检查、关键词提取。
  • 面试概率:

链表

  1. Add Two Numbers (两数相加)
  • 锻炼能力: 链表操作,数学运算。
  • 实际使用场景: 数值计算,如大数加法。
  • 面试概率:
  1. Reverse Linked List (反转链表)
  • 锻炼能力: 链表基本操作。
  • 实际使用场景: 数据操作,如历史记录的展示。
  • 面试概率:
  1. Merge Two Sorted Lists (合并两个有序链表)
  • 锻炼能力: 链表操作。
  • 实际使用场景: 数据合并,如合并两个有序的联系人列表。
  • 面试概率:
  1. Intersection of Two Linked Lists (两个链表的交点)
  • 锻炼能力: 链表操作,双指针。
  • 实际使用场景: 查找数据的交集,如找出两个用户的共同好友。
  • 面试概率:
  1. Remove Nth Node From End of List (删除链表的倒数第N个节点)
  • 锻炼能力: 链表操作,双指针。
  • 实际使用场景: 数据删除,如删除最近的历史记录。
  • 面试概率:

当然,我会为您继续进行详细的分析。

树和图

  1. Binary Tree Level Order Traversal (二叉树的层序遍历)

    • 锻炼能力: 树的层次遍历。
    • 实际使用场景: 数据的层级结构展示,如文件系统、组织结构等。
    • 面试概率:
  2. Maximum Depth of Binary Tree (二叉树的最大深度)

    • 锻炼能力: 递归,深度优先搜索。
    • 实际使用场景: 数据的深度分析,如网页抓取、网络分析等。
    • 面试概率:
  3. Clone Graph (克隆图)

    • 锻炼能力: 图的深度和广度优先搜索。
    • 实际使用场景: 数据复制,如复制社交网络的关系图。
    • 面试概率:
  4. Symmetric Tree (对称二叉树)

    • 锻炼能力: 递归,树的遍历。
    • 实际使用场景: 数据结构的对称性检查。
    • 面试概率:
  5. Balanced Binary Tree (平衡二叉树)

    • 锻炼能力: 递归,树的深度计算。
    • 实际使用场景: 数据结构的平衡性分析。
    • 面试概率:
  6. Number of Connected Components in an Undirected Graph (无向图中的连通分量的数目)

    • 锻炼能力: 图的遍历,连通性分析。
    • 实际使用场景: 网络分析,如社交网络中的社区检测。
    • 面试概率:
  7. Serialize and Deserialize BST (序列化和反序列化二叉搜索树)

    • 锻炼能力: 树的编码和解码。
    • 实际使用场景: 数据存储和恢复,如数据库的备份与恢复。
    • 面试概率:

动态规划

  1. Climbing Stairs (爬楼梯)

    • 锻炼能力: 动态规划,状态转移。
    • 实际使用场景: 路径规划,如地图应用中的多种路径选择。
    • 面试概率:
  2. Best Time to Buy and Sell Stock (买卖股票的最佳时机)

    • 锻炼能力: 动态规划,状态转移。
    • 实际使用场景: 财务分析,如股票买卖策略分析。
    • 面试概率:
  3. Coin Change (零钱兑换)

  • 锻炼能力: 动态规划,状态转移。
  • 实际使用场景: 资源优化,如资源分配策略。
  • 面试概率:

设计

  1. LRU Cache (LRU 缓存机制)
  • 锻炼能力: 设计缓存机制,哈希表,双向链表。
  • 实际使用场景: 数据缓存,如浏览器缓存、数据库缓存。
  • 面试概率:
  1. Find Median from Data Stream (数据流的中位数)
  • 锻炼能力: 数据流处理,堆。
  • 实际使用场景: 实时数据分析,如股票价格的实时中位数计算。
  • 面试概率:

当然,为您补充剩余的题目分析。

设计

  1. Design Twitter (设计推特)
  • 锻炼能力: 设计数据结构,时间复杂度优化。
  • 实际使用场景: 社交网络功能的实现,如发布、关注、获取新鲜事。
  • 面试概率:
  1. Design Search Autocomplete System (设计搜索自动补全系统)
  • 锻炼能力: 字典树(Trie),设计。
  • 实际使用场景: 搜索引擎的自动补全功能。
  • 面试概率:
  1. Design HashSet (设计哈希集合)
  • 锻炼能力: 数据结构设计,哈希表实现。
  • 实际使用场景: 数据去重,集合操作。
  • 面试概率:
  1. Design Circular Queue (设计循环队列)
  • 锻炼能力: 队列的设计与实现。
  • 实际使用场景: 数据缓冲,任务调度。
  • 面试概率:
  1. Design Hit Counter (设计点击计数器)
  • 锻炼能力: 时间窗口处理,数据流。
  • 实际使用场景: 网站流量分析,点击率统计。
  • 面试概率:
  1. Design Linked List (设计链表)
  • 锻炼能力: 链表设计与操作。
  • 实际使用场景: 自定义数据结构,内存管理。
  • 面试概率:
  1. Design Circular Deque (设计循环双端队列)
  • 锻炼能力: 双端队列设计与操作。
  • 实际使用场景: 数据缓冲,任务的优先级调度。
  • 面试概率:
  1. Design a Leaderboard (设计排行榜)
  • 锻炼能力: 数据排序,设计。
  • 实际使用场景: 游戏排行榜,评分系统。
  • 面试概率:
  1. Design In-Memory File System (设计内存文件系统)
  • 锻炼能力: 树形数据结构设计,文件系统模拟。
  • 实际使用场景: 文件管理,目录操作。
  • 面试概率:
  1. All O'one Data Structure (全 O(1) 的数据结构)
  • 锻炼能力: 设计,常数时间操作优化。
  • 实际使用场景: 快速数据查询与更新,如缓存系统。
  • 面试概率:

并发与多线程

  1. Fizz Buzz Multithreaded (多线程的 Fizz Buzz)
  • 锻炼能力: 多线程同步。
  • 实际使用场景: 并发任务调度,资源共享。
  • 面试概率:
  1. Building H2O (构建 H2O)
  • 锻炼能力: 线程同步,资源分配。
  • 实际使用场景: 资源管理,如数据库连接池管理。
  • 面试概率:
  1. 好的,我会继续为您分析每个题目。

其他相关概念

  1. Moving Average from Data Stream (数据流中的移动平均值)

    • 锻炼能力: 数据流处理,队列。
    • 实际使用场景: 实时数据分析,如股票价格的移动平均线。
    • 面试概率:
  2. Implement Trie (Prefix Tree) (实现 Trie (前缀树))

    • 锻炼能力: 数据结构设计,前缀树。
    • 实际使用场景: 字符串检索,如搜索引擎的自动补全。
    • 面试概率:
  3. Flatten 2D Vector (扁平化二维向量)

    • 锻炼能力: 迭代器设计,二维数据处理。
    • 实际使用场景: 数据处理,如多维数据的一维化展示。
    • 面试概率:
  4. Range Sum Query 2D - Mutable (二维区域和检索 - 可变)

    • 锻炼能力: 二维数据处理,树状数组或线段树。
    • 实际使用场景: 图片处理,如计算图片的某个区域的亮度。
    • 面试概率:
  5. Sliding Window Maximum (滑动窗口最大值)

    • 锻炼能力: 滑动窗口,双端队列。
    • 实际使用场景: 实时数据分析,如计算某时间窗口内的最大值。
    • 面试概率:
  6. Random Pick with Weight (按权重随机选择)

    • 锻炼能力: 前缀和,二分搜索。
    • 实际使用场景: 加权随机策略,如广告展示的权重分配。
    • 面试概率:
  7. Implement Rand10() Using Rand7() (用 Rand7() 实现 Rand10())

    • 锻炼能力: 数学,概率转换。
    • 实际使用场景: 随机数生成器的设计。
    • 面试概率:
  8. Count of Smaller Numbers After Self (计算右侧小于当前元素的个数)

    • 锻炼能力: 树状数组,线段树或归并排序。
    • 实际使用场景: 数据统计,如实时排行榜的动态更新。
    • 面试概率:
  9. Find K Pairs with Smallest Sums (查找和最小的 K 对数字)

    • 锻炼能力: 堆,排序。
    • 实际使用场景: 优先队列,如推荐系统中根据评分推荐最佳组合。
    • 面试概率:
  10. Logger Rate Limiter (日志速率限制器)

  • 锻炼能力: 设计,哈希表。
  • 实际使用场景: API调用频率限制,防止服务被恶意请求。
  • 面试概率:
  1. Stream of Characters (字符流)
  • 锻炼能力: 前缀树(Trie),数据流处理。
  • 实际使用场景: 文字输入预测,如键盘的下一个字预测。
  • 面试概率:
  1. LFU Cache (LFU 缓存)
  • 锻炼能力: 设计,哈希表。
  • 实际使用场景: 数据缓存,如数据库查询缓存,根据使用频率优化。
  • 面试概率:
  1. Insert Delete GetRandom O(1) (常数时间插入、删除和获取随机元素)
  • 锻炼能力: 哈希表,数组。
  • 实际使用场景: 数据库设计,如支持随机访问的数据结构。
  • 面试概率:
  1. Maximum Size Subarray Sum Equals k (和为 k 的最长子数组长度)
  • 锻炼能力: 哈希表,前缀和。
  • 实际使用场景: 数据分析,如寻找满足特定条件的数据子集。
  • 面试概率:
  1. My Calendar I, II, III (我的日程安排 I, II, III)
  • 锻炼能力: 设计,区间问题。
  • 实际使用场景: 事件调度,如会议室预约系统。
  • 面试概率:
  1. Time Based Key-Value Store (基于时间的键值存储)
  • 锻炼能力: 设计,哈希表,二分搜索。
  • 实际使用场景: 版本控制系统,如Git。
  • 面试概率:
  1. Word Search II (单词搜索 II)
  • 锻炼能力: 回溯,前缀树。
  • 实际使用场景: 文字游戏,如“找单词”游戏。
  • 面试概率:

国内大厂喜欢的题

链表类

数组/字符串类

栈/队列

二叉树

数学/算法

其他

更大的分类

##哈希表

  1. 0001 两数之和 - 简单 - 哈希表
  2. 0217 存在重复元素 - 简单 - 哈希表
  3. 0219 存在重复元素 II - 简单 - 哈希表
  4. 0036 有效的数独 - 中等 - 哈希表
  5. 0242 有效的字母异位词 - 简单 - 哈希表、排序
  6. 0205 同构字符串 - 简单 - 哈希表
  7. 0449 字母异位词分组 - 中等 - 哈希表、字符串处理
  8. 0350 两个数组的交集 II - 简单 - 哈希表、双指针
  9. 0136 只出现一次的数字 - 简单 - 位运算、哈希表
  10. 0268 丢失的数字 - 简单 - 数学、位运算
  11. 0015 三数之和 - 中等 - 数组、双指针
  12. 0454 四数相加 II - 中等 - 哈希表
  13. 0383 赎金信 - 简单 - 哈希表、计数
  14. 0202 快乐数 - 简单 - 哈希表、数学
  15. 0599 两个列表的最小索引总和 - 简单 - 哈希表
  16. 0447 回旋镖的数量 - 中等 - 哈希表、数学
  17. 0811 子域名访问计数 - 中等 - 哈希表、字符串处理
  18. 0359 日志速率限制器 - 简单 - 设计、哈希表
  19. 0442 数组中重复的数据 - 中等 - 哈希表
  20. 0387 字符串中的第一个唯一字符 - 简单 - 哈希表、字符串
  21. 0451 根据字符出现频率排序 - 中等 - 哈希表、排序
  22. 0149 直线上最多的点数 - 困难 - 哈希表、数学
  23. 0705 设计哈希集合 - 简单 - 设计、哈希表
  24. 0706 设计哈希映射 - 简单 - 设计、哈希表
  25. 0018 四数之和 - 中等 - 数组、哈希表、双指针
  26. [0128 最长连续序列](https://leetcode-cn

.com/problems/longest-consecutive-sequence/) - 中等 - 哈希表 27. 0041 缺失的第一个正数 - 困难 - 数组、哈希表

字符串

字符串基础题目

  1. 0014 最长公共前缀 - 简单 - 字符串遍历
  2. 0125 验证回文串 - 简单 - 双指针
  3. 0344 反转字符串 - 简单 - 双指针
  4. 0557 反转字符串中的单词 III - 简单 - 字符串处理
  5. 0415 字符串相加 - 简单 - 字符串遍历,模拟
  6. 0049 字母异位词分组 - 中等 - 哈希表、排序
  7. 0003 无重复字符的最长子串 - 中等 - 滑动窗口、哈希表
  8. 0005 最长回文子串 - 中等 - 动态规划、中心扩展法
  9. 0151 颠倒字符串中的单词 - 中等 - 字符串处理
  10. 0043 字符串相乘 - 中等 - 字符串、模拟

单模式串匹配题目

  1. 0028 实现 strStr() - 简单 - 双指针、KMP
  2. 0459 重复的子字符串 - 简单 - 字符串处理
  3. 0796 旋转字符串 - 简单 - 字符串处理
  4. 1408 数组中的字符串匹配 - 简单 - 字符串处理
  5. 0686 重复叠加字符串匹配 - 中等 - 字符串处理

字典树题目

  1. 0208 实现 Trie (前缀树) - 中等 - 字典树
  2. 0677 键值映射 - 中等 - 字典树
  3. 0648 单词替换 - 中等 - 字典树
  4. 0211 添加与搜索单词 - 数据结构设计 - 中等 - 字典树
  5. 0676 实现一个魔法字典 - 中等 - 字典树
  6. 0421 数组中两个数的最大异或值 - 中等 - 字典树、位运算
  7. 0212 单词搜索 II - 困难 - 字典树、DFS
  8. 0336 回文对 - 困难 - 字典树、哈希表
  9. 0425 单词方块 - 困难 -

字典树、回溯 10. 0440 字典序的第K小数字 - 困难 - 数学

堆栈

堆栈基础题目

  1. 0020 有效的括号 - 简单 - 栈、字符串
  2. 0155 最小栈 - 简单 - 栈、设计
  3. 1047 删除字符串中的所有相邻重复项 - 简单 - 栈、字符串
  4. 0227 基本计算器 II - 中等 - 栈、字符串
  5. 0739 每日温度 - 中等 - 栈、哈希表
  6. 0150 逆波兰表达式求值 - 中等 - 栈
  7. 0232 用栈实现队列 - 简单 - 栈、设计
  8. 剑指 Offer 09 用两个栈实现队列 - 简单 - 栈、设计
  9. 0394 字符串解码 - 中等 - 栈、深度优先搜索
  10. 0946 验证栈序列 - 中等 - 栈、数组

单调栈

  1. 0739 每日温度 - 中等 - 栈、哈希表
  2. 0496 下一个更大元素 I - 简单 - 栈、数组、哈希表
  3. 0503 下一个更大元素 II - 中等 - 栈、数组
  4. 0901 股票价格跨度 - 中等 - 栈、设计
  5. 0084 柱状图中最大的矩形 - 困难 - 栈、数组
  6. 0042 接雨水 - 困难 - 栈、数组、双指针、动态规划

队列基础题目

  1. 0622 设计循环队列 - 中等 - 队列
  2. 0346 数据流中的移动平均值 - 简单 - 队列、数组
  3. 0225 用队列实现栈 - 简单 - 栈、设计

优先队列题目

  1. 0703 数据流中的第 K 大元素 - 简单 - 堆、设计
  2. 0347 前 K 个高频元素 - 中等 - 堆、哈希表
  3. 0451 根据字符出现频率排序 - 中等 - 哈希表、字符串、桶排序
  4. 0973 最接近原点的 K 个点 - 中等 - 堆、分治
  5. 0239 滑动窗口最大值 - 困难 - 队列、数组、滑动窗口

二叉树

二叉树的遍历题目

  1. 0104 二叉树的最大深度 - 简单 - 深度优先搜索、递归
  2. 0102 二叉树的层序遍历 - 中等 - 广度优先搜索
  3. 0094 二叉树的中序遍历 - 简单 - 栈、树
  4. 0144 二叉树的前序遍历 - 简单 - 栈、树
  5. 0145 二叉树的后序遍历 - 简单 - 栈、树
  6. 0111 二叉树的最小深度 - 简单 - 深度优先搜索、广度优先搜索
  7. 0100 相同的树 - 简单 - 深度优先搜索
  8. 0101 对称二叉树 - 简单 - 深度优先搜索、广度优先搜索
  9. 0226 翻转二叉树 - 简单 - 递归
  10. 0124 二叉树中的最大路径和 - 困难 - 深度优先搜索

二叉树的还原题目

  1. 0105 从前序与中序遍历序列构造二叉树 - 中等 - 分治法
  2. 0106 从中序与后序遍历序列构造二叉树 - 中等 - 分治法
  3. 0889 根据前序和后序遍历构造二叉树 - 中等 - 分治法

二叉搜索树题目

  1. 0098 验证二叉搜索树 - 中等 - 深度优先搜索
  2. 0700 二叉搜索树中的搜索 - 简单 - 递归
  3. 0701 二叉搜索树中的插入操作 - 中等 - 递归
  4. 0450 删除二叉搜索树中的节点 - 中等 - 递归
  5. 0235 二叉搜索树的最近公共祖先 - 简单 - 递归

单源最短路径题目

  1. 0743 网络延迟时间 - 中等
  2. 1631 最小体力消耗路径 - 中等 - 深度优先搜索、广度优先搜索、并查集、二分查找
  3. 0787 K 站中转内最便宜的航班 - 中等
  4. 0407 接雨水 II - 困难

多源最短路径题目

  1. 1162 地图分析 - 中等
  2. 0815 公交路线 - 困难

次短路径题目

  1. 2045 到达目的地的第二短时间 - 困难

差分约束系统

  1. 1109 航班预订统计 - 中等 - 数组、前缀和
  2. 0995 K 连续位的最小翻转次数 - 困难 - 位运算、数组、前缀和、滑动窗口

二分图基础题目

  1. 0785 判断二分图 - 中等 - 深度优先搜索、广度优先搜索、并查集、图

二分图最大匹配题目

  1. 1947 最大兼容性评分和 - 中等
  2. LCP 04 覆盖 - 困难

基础算法

枚举算法题目

  1. 0001 两数之和 - 简单 - 数组、哈希表
  2. 0560 和为 K 的子数组 - 中等 - 数组、哈希表、前缀和
  3. 0204 计数质数 - 中等 - 数学、哈希表

递归算法题目

  1. 0206 反转链表 - 简单 - 链表
  2. 0104 二叉树的最大深度 - 简单 - 树、深度优先搜索、递归
  3. 0344 反转字符串 - 简单 - 字符串

分治算法题目

  1. 0004 寻找两个正序数组的中位数 - 困难 - 数组、二分查找、分治算法

回溯算法题目

  1. 0046 全排列 - 中等 - 回溯算法
  2. 0047 全排列 II - 中等 - 数组、回溯

贪心算法题目

  1. 0455 分发饼干 - 简单 - 贪心、数组、排序
  2. 0860 柠檬水找零 - 简单 - 贪心、数组

位运算题目

  1. 0190 颠倒二进制位 - 简单 - 位运算
  2. 0191 位1的个数 - 简单 - 位运算

链表刷题思路

1. 刷题思路:

  • 理解链表结构:链表是一种线性数据结构,其中每个元素都是一个独立的对象。每个元素(称为“节点”)都有两个项:节点的数据和指向下一个节点的引用。
  • 明确问题:确保您清楚地理解了问题和期望的输出。例如,问题可能是查找、修改、删除或其他操作。
  • 边界情况:考虑链表为空或只有一个节点的情况。

2. 常见策略和方法:

  • 快慢指针:这是解决链表问题的常用策略,尤其是涉及到查找中间节点、检测循环或确定循环长度的问题。
  • 双指针:对于某些问题,例如查找倒数第k个节点,您可以使用两个指针,第一个指针先移动k步,然后两个指针同时移动,直到第一个指针到达链表的末尾。
  • 递归:某些链表问题,特别是涉及到反转链表或合并两个有序链表的问题,可以使用递归来解决。
  • 哑节点(dummy node) :在处理链表的插入和删除操作时,哑节点可以帮助简化边界情况,尤其是在链表的头部和尾部。
  • 修改链表结构:在某些情况下,例如复制带有随机指针的链表,您可能需要先修改链表的结构,然后再恢复它。

3. 注意事项:

  • 不要丢失引用:在修改链表时,确保始终保持对链表部分的引用,否则您可能会丢失部分或全部链表。
  • 检查空指针:在进行链表操作时,始终检查指针是否为空,以避免空指针异常。
  • 循环:确保在进行操作时,您没有无意中创建一个循环链表,除非题目要求这样做。
  • 修改链表时的顺序:当您需要修改链表结构(如插入、删除或移动节点)时,请注意操作的顺序,以确保链表的完整性。

总的来说,链表是数据结构和算法中的基本主题,理解其基本概念和常见策略对解决相关问题至关重要。

哈希表刷题思路

哈希表题目特点

  1. 快速查找:哈希表的主要优势是能够在常数时间内完成查找操作。
  2. 键值对:哈希表通常用于存储键值对,其中键是唯一的。
  3. 去重:由于哈希表中的键是唯一的,它经常被用于去重操作。
  4. 计数问题:哈希表经常被用于计数,例如统计一个数组中的每个元素的出现次数。

常见的解题套路

  1. 频率计数:当需要统计元素的频率时,可以使用哈希表。
  2. 累计和:在处理子数组和等于特定值的问题时,可以使用哈希表来存储累计和及其出现的次数。
  3. 双索引:例如在两数之和的问题中,可以使用哈希表来查找与当前元素匹配的另一个元素。
  4. 缓存:例如在 LRU 缓存设计中,哈希表与双向链表结合,提供了快速的查找和更新操作。

需要注意的细节

  1. 碰撞处理:虽然在现实编程中,如 Python 的字典或 Java 的 HashMap,我们不需要处理碰撞,但在某些面试或编程挑战中,可能需要。
  2. 哈希函数:选择一个好的哈希函数可以确保数据均匀分布,从而提高哈希表的效率。
  3. 可变键:如果哈希表的键是可变的,如 Python 中的列表,那么在使用前需要先将其转换为不可变的类型,如元组。

常见的分析思维逻辑流程

  1. 确定需求:首先要确定是否需要快速查找、计数或去重。
  2. 选择数据结构:如果需要上述的操作,哈希表很可能是一个好选择。
  3. 考虑空间与时间:虽然哈希表提供了快速的查找,但它也使用了额外的空间。在某些情况下,需要权衡时间和空间。
  4. 边界情况:考虑哈希表为空或非常大时的情况。

总的来说,哈希表是解决许多 LeetCode 问题的强大工具。通过练习和分析,可以更熟练地使用哈希表来优化解决方案。