首页/新闻资讯/正文详情

每日力扣4刷题法:从算法面试高频题到Python实战全解析

发布时间:2026/9/26 20:38:10 来源:云帆数科 栏目:资讯中心
每日力扣4刷题法:从算法面试高频题到Python实战全解析
每天一到早上我打开力扣第一件事就是看今天的“每日力扣4”计划完成了没。这个系列我从半年前开始做规则非常简单粗暴每天雷打不动刷4道力扣题一道热题100里没做过的一道高频经典但容易忘的一道按专题选的专项训练最后再补一道之前错过的题。坚持下来之后最明显的变化不是AC数涨了多少而是面对陌生题目的时候脑子里不再是一片空白而是能快速定位到“这题我见过类似的考的是哈希表”或者“这题典型的动态规划状态转移应该是这样”。今天这篇文章我就把“每日力扣4”这套打法的完整逻辑、今天选中的4道题含面试出现过三次的买股票最佳时机、蛮有意思的1875将雇员相同的分组以及热题100里的两数之和和反转链表怎么一步步啃下来的过程连同我踩过的坑和排查思路一次讲清楚。适合准备算法面试的人、刷力扣热题100但老是三天打鱼两天晒网的人、还有想用Python刷题但不知道从哪下手的同学。1. 这个系列背后的设计思路为什么偏偏是每天4道一开始我也走过“一天刷10道、周末刷50道”的弯路结果就是周一信心满满周三开始做不动周末直接摆烂下周从头再来反复循环了快一个月进度还是只有那么十几道题。后来我认真想了一下问题不在于懒也不在于题难而是在于节奏不对。1.1 四道题的分配其实是按记忆曲线和面试需求来的每天4道不是随机抓4道题而是分成四个角色。第一道是“新题”我从力扣热题100和每日一题里挑一道没做过的。这道题的作用是保证每天都能接触新知识点维持那种“接着学”的状态。第二道是“旧题复刷”专门挑一道前段时间做过但当时觉得模糊的题隔几天重新做一遍。这个安排很关键刷题最怕的就是“刷过就忘”复刷就是对抗遗忘曲线最直接的办法。我试过一周前AC过的一道中等难度题隔一周再写居然卡了20分钟才想起来核心思路从那以后复刷就变成了固定项。第三道是“专题专项”比如这周我定的专题是哈希表那第三道题就一定会和哈希表相关。专题轮换一般是两周一个数组、双指针、二分、链表、二叉树、动态规划、贪心、图论一个一个轮过去。第四道是“错题重刷”翻出过去一周里做错或者看了题解才写出来的题重做一遍。这一道才真正决定刷题有没有效果因为它逼着你直面自己的薄弱点而不是一直做那些顺手的题自我感动。1.2 这道题选什么标准题目池怎么搭建很多人刷力扣的第一步就是打开题库从1开始按顺序刷这个操作我极其不建议。按序号刷的结果通常是一道简单题磨40分钟做了30道就被劝退。我的题目池只有三个来源。第一个是力扣热题100这是最核心的池子里面每一道都是高频中的高频覆盖了绝大多数面试题型。第二个是力扣题库里按“频率”排序后前方的中等题。第三个是自己收藏夹里积累的错题和经典题。这样一来“每日力扣4”就变成了一套有输入、有消化、有复盘的小系统而不是单纯地消耗题目数量。2. 今日4道题全解析从读题到AC的真实过程下面我直接进入今天的4道题这4道题分别代表了我前面说的四个角色。我会把每一道题从读题、思路分析到落地的完整过程拆开来讲包括代码和复杂度。2.1 力扣121 买股票的最佳时机贪心和动态规划到底怎么选先说高频中的高频题力扣121买股票的最佳时机。题目描述很简单给定一个数组pricesprices[i]表示第i天的股票价格你只能选择某一天买入并在之后的某一天卖出求能获得的最大利润。我第一次做这道题的时候第一反应是两层循环枚举每一天买入、每一天卖出算最大差值。这个解法写起来三分钟但一提交就超时了因为prices数组最长有10万的长度O(n²)级别在极限数据下要跑上亿次运算。这道题的经典解法是贪心思想核心用一个变量记录历史最低价同时不断计算“今天卖出能赚多少”取最大值。用生活化的话说我每天只需要记住过去最便宜的价格是多少然后每天收盘时看看当天卖出能赚多少钱把赚最多的那天记下来就行。def maxProfit(prices): if not prices: return 0 min_price prices[0] max_profit 0 for price in prices[1:]: if price min_price: min_price price else: max_profit max(max_profit, price - min_price) return max_profit时间复杂度O(n)一次遍历搞定空间复杂度O(1)。这道题还有一种写法是动态规划。定义dp[i]表示到第i天为止能获得的最大利润状态转移就是dp[i] max(dp[i-1], prices[i] - min_price)。你会发现贪心解法其实就是动态规划把空间压缩掉之后的样子因为dp[i]只依赖于dp[i-1]所以只需要一个变量就够了。面试的时候这道题最常被追问的变种有两个。一是允许多次买卖力扣122这时候贪心的思路变成“只要明天比今天贵就赚差价”二是只允许完成两笔交易力扣123这就真的要用动态规划还得维护四个状态变量。我建议把这三道题放在一起刷因为它们层层递进是理解贪心和动态规划区别的绝佳素材。2.2 力扣1875 将雇员相同的分组哈希表分组题的实战价值接下来是今天最有意思的一道力扣1875 将雇员相同的分组。题目的要求是把员工按照工资进行分组工资相同的人分到同一组最后按照工资升序返回分组每组内部按员工信息升序排列。这道题是典型的哈希表分组题和力扣49字母异位词分组是同一种套路。核心思路就两步第一步遍历所有员工信息把工资作为key员工信息组成的列表作为value装进一个字典第二步把字典的key排序按key从小到大输出value列表。def groupEmployees(employees): groups {} for name, salary in employees: groups.setdefault(salary, []).append(name) result [] for salary in sorted(groups.keys()): groups[salary].sort() result.append([salary] groups[salary]) return result这道题我为什么单独拉出来讲因为它在实际工作和面试中对应的场景太常见了分组处事的逻辑在真实业务里到处都是。比如财务系统里按工资段对员工分组电商后台按商品类目对SKU分组统计系统里按地区对用户分组本质都是“选一个属性当key把同类的对象归类”。很多人会忽略的一个细节是分组后的排序。如果题目要求“按工资升序返回分组”那sorted(groups.keys())这一步就漏不得。还有一个容易踩的坑是key的选择如果分组依据不是单个字段而是多个字段的组合那就得把多个字段拼接成一个元组当作key绝对不能直接拼接字符串否则容易因为字段边界不清而分错组。比如两个员工分别来自部门“12”和部门“34”如果直接把部门和工号拼在一起可能产生歧义。用元组(tuple)当key是最安全的选择Python的字典完全支持元组作为键。2.3 力扣热题100里的两数之和简单的题才是分水岭第三道是我从热题100里挑的“两数之和”。在很多有经验的人眼里这题简单得都不好意思拿出来讲但我的体会是恰恰是这种最简单的高频题才最能看出一个人是不是真的理解了算法而不是背住了模板。题目给定一个整数数组nums和一个整数目标值target请你在该数组中找出和为目标值的两个整数并返回它们的数组下标。暴力解法是O(n²)的双层循环这个解法放到现在已经不合格了面试的时候你要是上来就写暴力解面试官大概率会追问“能不能优化到O(n)”。优化思路的核心是遍历数组的时候我每看到一个数x我真正关心的是前面已经出现过的数里有没有target - x。所以用一个哈希表存“值-下标”的映射每次先查target - x在不在哈希表里不在就把当前x存进去在就直接返回。def twoSum(nums, target): seen {} for i, num in enumerate(nums): complement target - num if complement in seen: return [seen[complement], i] seen[num] i return []同样一道题暴力解只体现“会循环”哈希表解法才体现“把遍历过的信息存下来复用”的意识。这种意识在力扣刷题里几乎贯穿始终缓存、记忆化搜索、前缀和、滑动窗口本质上都是在利用已经处理过的信息。所以我给刷题新手的建议是遇到一道题先想“我能不能在遍历一遍的过程中把当前需要判断的信息用哈希表提前维护好”这个思维习惯一旦养成很多题目都能立刻找到突破口。2.4 力扣206 反转链表迭代和递归的取舍第四道题是链表专题里的反转链表。这道题我面试时候被要求手写过不下五次几乎每次都是“先写迭代版再讲讲递归版怎么理解”。迭代版的思路是准备一个prev指针指向Nonecur指针指向头节点然后每次循环做四步先把cur.next存到tmp里防止丢失把cur.next指回prev把prev移动到cur把cur移动到tmp。直到cur走到Noneprev就是新链表的头。def reverseList(head): prev None cur head while cur: tmp cur.next cur.next prev prev cur cur tmp return prev这段代码写完很多初学者会有一个困惑为什么最后返回的是prev而不是cur因为循环结束的条件是cur为空说明cur已经走过了所有节点此时prev恰好停在新链表的最后一个节点上也就是原链表的最后一个节点它才是反转后的头节点。递归版的写法简洁到让人怀疑人生但理解起来稍微绕一些。递归的核心思想是先把head后面的整条链表反转得到一个新头然后把head接到新链表的尾部。这里的难点在于“head.next.next head”这一步意思是让head的下一个节点反过来指向head相当于完成了一次反向连接。def reverseListRecursive(head): if not head or not head.next: return head new_head reverseListRecursive(head.next) head.next.next head head.next None return new_head链表题的通病就是指针丢掉。我见过太多人写反转链表写到一半head.next原来的后续节点找不到了就是因为在修改指针之前没有用临时变量保存。这个习惯不只出现在链表题里凡是涉及修改数据结构内部引用关系的题目第一步一定是先备份。3. 刷题过程中的崩溃瞬间真实踩坑与排查思路刷题半年我踩过的坑比做对的题还多。这里我挑几个有代表性的、很多人都会遇到的坑把排查思路一并写出来。3.1 超时的真正原因不是循环太多而是数据结构选错前面提到的121题我第一次用O(n²)跑测试用例小数组秒过一旦数组长度上万就开始卡顿几乎可以百分百确定问题出在复杂度上。但有意思的是很多人遇到超时以后的第一反应是“优化循环里面的逻辑”比如把range换成enumerate或者把不必要的分支抽出来——这些操作只能把运行时间缩小一个常数本质还是O(n²)换个更狠的用例照样超时。我的排查方法论是拿到一道题先看数据范围数组长度到10的4次方以上基本可以放弃O(n²)到10的5次方只考虑O(n log n)或O(n)10的6次方以上只有O(n)甚至O(log n)才可能通过。这个判断是刷题的基本功比背模板重要得多。3.2 分组题最容易踩的三个边界1875这道题看着简单但边界条件非常阴间。第一个是空输入employees列表为空时你的分组字典是空的排序输出也是空列表逻辑上没错但如果你在遍历之前就用了employees[0]这种取下标操作直接就IndexError。第二个是只有一个员工的情况group里只有一个元素排序和输出都要能正确处理。第三个是key不是单一字段时如果拼接key用了字符串连接就好比我前面说的“部门12工号3”被误读成“部门1工号23”这种错非常隐蔽测试用例大概率能过但一到真实业务里就出大问题。我的建议是涉及分组的题目一律使用元组作为字典key拒绝字符串拼接。这是从惨痛教训里总结出来的硬性规定。3.3 Python刷题的效率问题什么时候该逃出Python换语言Python写算法题确实快代码量少调试舒服。但Python有个天生的短板是运行速度慢常数大。同样的O(n log n)算法C和Java能过Python可能就超时尤其是涉及大数组排序、嵌套哈希表和频繁增删的操作。我的应对策略是能用内置函数绝对自己写列表操作比如sorted、dict.get、collections.Counter、defaultdict这些都会比你手动实现快很多能用集合运算就用集合运算遇到性能瓶颈时优先考虑减少循环层数而不是微调循环内部。真遇上Python顶不住的题我会换个思路想有没有O(n)的数学解法比如很多前缀和问题其实可以用“哈希表存最早出现下标”的方式优化掉排序。3.4 面试官视角为什么刷题不能只满足于AC这个问题是我做了几次模拟面试之后才彻底想明白的。你在力扣上把题目AC了只说明你写出了一个能通过所有测试用例的解法但面试官要考察的不只是“能不能写出来”还包括“能不能说清楚为什么”。同样的121题AC的人很多但面试官一问“贪心解法为什么是正确的”很多人就卡住了。原因是他们写代码的时候只记住了“维护最小价格、取最大差值”这个模板没有真正理解每一步为什么能保证最优解。我的经验是刷每一道题AC之后必须能回答三个问题这个算法为什么正确时间复杂度为什么是这样如果数据范围扩大十倍还成立吗回答不出来这道题就等于没刷透。4. 让“每日4题”真正坚持下去的操作系统刷题这件事技术难点反而小真正的难点是坚持。我给自己搭了一套简单的“刷题操作系统”今天就把它全部分享出来。4.1 每周计划与时间安排我每天的4道题不是找一个整块时间一次性做完而是拆成三个时段。早上起床后花15-20分钟做第一道新题利用早上脑子清醒的时候啃硬骨头中午午休后花15分钟复刷昨天的旧题这时候人容易困做旧题压力小晚上下班后集中精力做专题训练和错题重刷大概40-60分钟。这样全天加起来的刷题时间在一个半小时左右但分摊到三个时段里心理负担会小很多不会觉得“今天又要刷两个小时题”。每周我会固定留一天做周回顾不刷新题只把这周做过的所有旧题和错题重新过一遍。这个动作看起来只是复习实际上它才是知识内化的关键环节。我用的是最简单的办法手机备忘录里建一个“力扣复盘”清单每周日晚上把本周所有AC过的题目标题写下来先不看题解纯靠记忆复述思路复述不出来的题下周就标记为“必复习题”。4.2 错题复盘模板一道错题该记录什么很多人刷题有一个通病错题看完题解AC之后就再也不管了结果就是同一道题能错三次。我给自己定了一个复盘模板每道错题记录五个字段题目名称和编号、错误类型思路错误还是代码错误、正确思路一句话总结、关键数据结构和复杂度、下次重刷日期。这个模板最有价值的地方就在于“正确思路一句话总结”。写这句话的时候你被迫把一整段题解压缩成自己理解了的核心思想。比如121题的总结我写的是“维护历史最低价用当前价减最低价更新最大利润”两数之和的总结写的是“遍历时用哈希表存已出现的值找补数”。这种压缩后的总结在面试前非常有用翻一遍就能快速激活记忆。4.3 从每日刷题到面试讲题如何把AC能力转成表达力这里必须承认一个残酷的事实有些人刷了300道题面试的时候还是挂得很惨因为表达能力跟不上。力扣刷题让你会做但面试需要你会讲。所以我给自己增加了一个练习环节每天做完4道题之后挑其中一道用两三分钟的时间假装面前坐着面试官把题目读一遍、讲思路、分析复杂度、说边界条件整个过程录音或者在心里过一遍。这个练习一开始非常别扭讲起来颠三倒四。但坚持了两周之后我发现自己的表达结构开始变得清晰先说什么、再说什么、哪里需要强调、哪里一句话带过都有了肌肉记忆。面试的时候面试官问的其实并不是“你AC了没”而是“你怎么思考的”。这个思考过程能否清晰表达出来才是决定面试结果的关键。4.4 关于“题目刷不完”的心态问题我经常看到有人问“力扣题库几千题刷得完吗”。我的看法是刷题的目标从来就不是把题库刷穿而是建立一种识别题目模式的能力。当你把热题100和常见专题刷过两三遍之后再看到新题你会发现绝大多数题目都是“旧瓶装新酒”——考察的还是滑动窗口、双指针、哈希表、动态规划那几板斧。所以每天4道题这个数量不在于多而在于稳定。跑马拉松的人都知道配速比冲刺重要得多。我刚定下这个系列的时候给自己定的规矩就一条今天哪怕只做一道简单的题也比彻底不做好。这个最低标准的存在让我在加班到晚上十点、累到不想动笔的日子也能保持这个系列不断档。5. 刷题高频问题速查表别人踩过的坑我帮你先踩最后我把这半年刷题过程中评论区、交流群里出现频率最高的问题整理成一个速查表附带我的处理经验。5.1 力扣题目编号和题解版本变化怎么应对力扣的题目编号是固定的但题解区的内容动态更新非常快几年前的高赞题解可能已经不适合现在的数据范围。我的处理办法是看题解优先看“思路讲解”跳过“完整代码”先自己尝试把思路落地卡住了再回来看代码。因为你现在看别人代码看懂了不代表你能写出来只有亲手敲一遍合适代码思路才会变成自己的。5.2 Python和C刷题怎么选从面试角度讲如果目标公司明确要求某一种语言那就直接用那种语言刷。如果没有限定自己最熟什么语言就用什么语言。不过我想多说一句Python刷题有它独有的优势代码量少、数据结构封装完整、可以快速验证想法非常利于面试中快速和面试官对齐思路但Python的常数偏大有些对性能要求极高的题目可能会吃亏。所以我的建议是日常刷题用Python练思路每周抽一两道题用手写C或者Java再实现一遍两种语言的切换能力是加分项。5.3 刷题时到底要不要看题解看题解不是耻辱瞎刷才是。我的规则是一道题独立思考30分钟没有推进就去看题解。关键是看完题解之后必须合上题解自己完整写一遍并且过两天再复刷一次。只看不写等于白看这个环节偷懒的话刷题数量再多也没法转化成真正的能力。5.4 热题100和每日一题怎么搭配每日一题是相对随意的题目流非常适合当作“新题接入点”但它无法覆盖完整的知识结构。热题100是精选题目集适合系统学习。我的做法是热题100作为主线按专题推进每日一题作为支线随机补充。主线保证知识体系完整支线保证视野不局限于专题。两者的交叉点就在于我前面说的四道题分配法主线出两道支线出一道错题复盘出一道。我个人这半年刷下来最有价值的收获不是AC了将近500道题而是建立了一套属于自己的思考方式看到题目先想数据范围、再想时间复杂度、再匹配数据结构、最后落代码。每天4道这个节奏让我在忙碌的工作和生活之间找到了一个平衡点。如果你也想开始刷题或者正在刷题但坚持不下来不妨试试这套打法。先别想太多从今天的一道新题开始明年的今天你会感谢现在的自己。

相关推荐

Postman公共函数封装指南:告别Pre-request Script重复代码
Postman公共函数封装指南:告别Pre-request Script重复代码

做接口联调这几年,我在 Postman 里最烦的事不是接口长时间无响应,而是同一个签名算法在十几个请求的 Pre-request Script 里各放了一份。每次后端改一点逻辑,我都要打开每个请求、找到那段一模一样的代码、逐个替换,还得提心吊胆怕… · 2026/9/26 20:38:10

VSCode Bookmark插件:从代码标记到跨文件导航的工程实践
VSCode Bookmark插件:从代码标记到跨文件导航的工程实践

1. 为什么我离不开 VSCode Bookmark:核心场景与设计思路1.1 它解决的到底是哪个痛点先聊一个每天都会遇到的场景:你打开了一个几百上千行的文件,里面有几个位置需要反复修改。比如前端项目里,一个组件的样式定义在 style 区&#… · 2026/9/26 20:38:03

π0模型:面向具身智能的轻量级物理响应建模框架
π0模型:面向具身智能的轻量级物理响应建模框架

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 20:38:03

Word快捷键Shift+F3:三步搞定英文大小写批量转换
Word快捷键Shift+F3:三步搞定英文大小写批量转换

1. 这个操作到底在解决什么问题?——别再手动删重输了Word里把一段全大写的英文标题(比如“THIS IS A SAMPLE TITLE”)改成首字母大写或全小写,看似只是按几下键的小事,但背后其实是文字处理中一个高频、高误操作率的“… · 2026/9/26 21:14:44

银行卡BIN数据落地:Excel+MySQL双格式实现发卡行快速查询
银行卡BIN数据落地:Excel+MySQL双格式实现发卡行快速查询

简介:这份银行卡BIN数据集来自银联官方2020年4月25日发布的最新最全版本,共收录9868条银行卡BIN记录,涵盖BIN码、BIN长度、发卡行、银行卡名称、卡类型、卡长度等核心字段。资源面向支付开发、风控建模、银行系统测试及数据分析人员&#xff… · 2026/9/26 21:14:37

让AI决策自动分流:DeepOpen置信度门控实战,高置信直接处理、低置信转人工
让AI决策自动分流:DeepOpen置信度门控实战,高置信直接处理、低置信转人工

让AI决策自动分流:DeepOpen置信度门控实战,高置信直接处理、低置信转人工 【免费下载链接】deepopen 非自回归System 1决策引擎,专为结构化类型决策场景设计 DeepOpen Multilingual, non-autoregressive System 1 decision engine. 项目地… · 2026/9/26 21:14:37

计及调峰主动性的多能互补协调优化调度Matlab实现
计及调峰主动性的多能互补协调优化调度Matlab实现

风电、光伏大规模并网之后,电网的净负荷曲线变得越来越陡。午间光伏大发时全网负荷被压出一个大坑,傍晚光伏退坡后负荷又急剧拉升,火电机组跟着上蹿下跳,AGC指令根本来不及响应。传统做法是靠火电硬扛调峰,但火电的爬坡… · 2026/9/26 21:14:37

CKEditor导入PPT保持动画效果:从PPTX解析到网页动画播放的完整方案
CKEditor导入PPT保持动画效果:从PPTX解析到网页动画播放的完整方案

做教育网站的内容管理,最头疼的不是排版,而是两套体系之间的格式鸿沟。CKEditor作为富文本编辑器,收到的是HTML;而老师上传的课件是PPTX,里面塞满了基于时间线的动画。你可以在编辑器里插一张图、贴一段文字&#xff0… · 2026/9/26 21:14:10

Windows下libcurl+OpenSSL开发库:32/64位选型、编译与避坑指南
Windows下libcurl+OpenSSL开发库:32/64位选型、编译与避坑指南

简介:本资源为 libcurl 与 OpenSSL 动态开发库合集,面向需要在 Windows 平台进行 HTTPS 通信、密码学相关开发的 C/C 程序员,尤其适合处理网络请求、SSL 加密与证书管理的项目场景。包内同时提供 32 位与 64 位两套版本,包含对应的… · 2026/9/26 21:14:10

数据库课后习题答案别硬背:当测试用例集刷,效率翻倍
数据库课后习题答案别硬背:当测试用例集刷,效率翻倍

简介:万常选版《数据库原理与设计》课后习题答案资源,覆盖第2至6章及第9章,适合正在学习关系模型、数据库建模、关系数据理论与模式求精的本科生、自学者作为复习与自测材料。压缩包共7个文件,含3个doc参考答案、2个sql示例脚本、… · 2026/9/26 0:00:21

OpenClaw 替代品?Hermes Agent 踩坑实录:macOS 飞书接入 TaoToken 配置
OpenClaw 替代品?Hermes Agent 踩坑实录:macOS 飞书接入 TaoToken 配置

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 0:00:40

向下兼容与向上兼容:接口设计中的兼容性策略与工程实践
向下兼容与向上兼容:接口设计中的兼容性策略与工程实践

一次版本升级事故,是很多团队绕不过去的坎。线上环境里,服务端明明已经上线了新版接口,老的移动端还在照着旧文档传参数。请求一到网关,校验直接拒绝,用户操作失败,客服群炸了锅,开发群里开始互… · 2026/9/26 0:00:46

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码