30 道精选简单题,手把手带你从「会编程」变成「会算法」,每一题都解释清楚为什么这样想
你已经会写 for 循环和函数,但看到算法题脑子一片空白?这条路帮你打通从编程到算法的最后一公里。6 个里程碑,覆盖数组、哈希、双指针、栈队列、链表、二叉树、二分和入门 DP——业界公认小白必过的知识点,一个不落。每道题的「衔接语」告诉你上一题学的招式怎么在这道题里变形复用,让你真正建立体系,而不是刷完就忘。
适合:刚学完一门编程语言、没碰过算法的纯小白
一遍线性扫描 + 原地修改技巧:下标即地址、计数器追状态、慢指针占位——三个模式反复出现,是后续一切数组题的基础。
第一题:数组下标遍历,边扫边原地修改,打开算法世界的第一扇门
上一题扫数组写计数器,这题同一计数器追连续段,顺手加max记峰值
上题计数器记状态,这题改用慢指针占位把非零往前挤,首次同向双指针
上题双指针写位置,这题用「下标即值」原地标记找消失数,空间O(1)新招
上题原地标记扫数组,这题一遍扫维护最低价+最大利润,同样一次遍历出结论
哈希表把「查找配对 / 判重 / 计频次」从 O(n²) 压到 O(1):存什么、查什么是核心,三类变体(查存在 / 查配对 / 存频次)掌握后举一反三。
有序序列两端对撞:左右指针向中间夹逼,每次移动都能排除一侧可能性;字符串两招:哈希计频次 + 按列对齐逐字符比较——一旦掌握可迁移到大量变体题。
上题哈希查询,这题利用有序数组从尾向前合并,首次「对撞双指针」
上题从两端往中合并,这题两端对撞取平方最大值放结果尾,同一收缩套路
上题两端对撞比大小,这题两端对撞比字符判回文,套路完全相同
前面哈希统频次,这题第一遍数频次第二遍找频次=1的位置,哈希两遍走
上题两遍扫字符串,这题按列逐字符比所有单词,列扫描=字符串对齐的通用技
栈的两类用法:括号配对(LIFO 弹出匹配)和单调栈(维护递增/递减序找「右边第一个更大/小值」);用栈模拟队列,练会两种结构互转的核心思路。
链表三板斧:反转(三指针迭代)/ 合并(双指针推进)/ 快慢指针找中点或判环;二叉树递归模板:选好遍历时机,让返回值传递计算结果——两类结构都靠同一套递归思维打通。
刚了解链表结构,这题用prev/cur/next三指针原地翻转,链表操作最基础手法
上题三指针操作节点,这题双指针推进两链归并,复用了合并有序序列思路
上题双指针各推一链,这题快慢指针推同一链:快2步慢1步,快到头慢在中点
上题快慢指针找中点,这题快慢判环:有环必追上,无环快指针先到null
链表学了递归,这题搬到树:每个节点交换左右子,递归自底向上完成翻转
上题递归对节点做操作,这题递归返回值:左右子树深度max+1,首次递归返回数值
上题单节点递归,这题双节点递归比对:对称=左镜像等于右,传两指针同步推进
上题双节点比对,这题递归带剩余target:到叶子判是否耗尽,树上DFS初步形态
二分把有序搜索从 O(n) 压到 O(log n),框架是「缩区间直到 lo==hi」;DP 的核心是状态转移:找到「当前状态依赖哪几个过去状态」就能解题——两道题打完 DP 心智模型的地基。