高频知识总结 | 算法题如何刷?我的高效刷题方法

1. 前言

所以本文章主要就是详细的告诉大家我的刷题方法论,可以做一个参考,如果你觉得我的分享对你有帮助,希望多多点赞收藏评论转发支持!

2. 算法题到底该怎么刷?

回答这个问题只需要两个点:一是刷什么题,二是用什么方法刷

2.1 刷什么题?

首先来回答第一个问题,刷什么题?

  • 《剑指Offer》
  • LeetCode 前200道 + 热题100(这些有高度重合)
  • CodeTop 里按类别可以把前30道题给刷了,部分比较高频的类别比如链表,就可以把出现频次大于20的题都给刷了。

以上题大都有重复,总共估计就300题,甚至不到300题,只要会这些题,应付国内大厂的笔试面试足够了!

我的经验是,不用一直刷新的题目,只要能做到把这200多快300道高频题融会贯通,那么就可以应付笔试足够,应付面试有余了。

资料分享(一些我觉得不错的资料/公众号题解分享)

因为只看一个题解有时候会看不懂,所以不要不要被一段代码所卡住!如果你看不懂的话,可以多找几个讲解的人、博客来看一下,总要有一个人跟你的想法是相似的,脑回路是一样的。下面就列举一下我当时看的一些大佬写的题解,集思广益很重要

  • CodeTop:
  • 代码随想录(必看)
  • liweiwei(weiwei哥写题解真的是不厌其烦,各种细节都掰开了揉碎了给你往嘴里塞)

还有其他我看的一些题解,不多,但他们都或多或少对我有帮助,很感谢这些大佬把业余时间拿出来进行分享。

  • 负雪明烛:
    • gzh:负雪明烛
  • 力扣加加 / lucifer:
    • gzh:力扣加加
    • pdf:去 github 下载
  • labuladong:
    • 公众号:labuladong
    • pdf:我不记得在哪下载了,去公众号上应该能找到
  • 甜姨(写的题解不多,但是很通俗易懂):
    • gzh:甜姨的奇妙冒险
    • leetcode
  • 宫水三叶(三叶姐只在leetcode上写每日一题)

2.2 怎么刷?

  • 刷一道题分三个阶段来看:

    • 第一层:做到“能够根据脑子里这张图把算法的流程用极为精确的语言描述出来,并且画出来那张算法分析的动态图”,其实就是讲思路!并且能够分析不同的算法的时空复杂度!
    • 第二层:“码形结合”的能力,能够根据脑子里这张图把算法的伪代码大致写出来。这里提到一个我自创的名词 “码形结合”,因为也是受到高三做题时的 “数形结合” 的启发,其实写代码有时候也是需要你在心里先有一个数据结构的图,然后根据这张图来把代码实现。比如【回溯算法】的本质其实就是N叉树的遍历,并加上了一些剪枝操作,如果你能在心里把【回溯算法】的N叉数的各个节点的分裂情况给画出来,那么这道题就成功了一半了。
    • 第三层:实现能力,“ 能够不假思索的一边讲思路,一边把代码敲出来并且能够AC”,这个就是面试的最高境界,能一边把整个题的宏观思路给面试官顺下来,一边把题目按你的思路一项一项的去实现。除此之外,还需要有一定的触类旁通思维,能把这道题抽象出来一个算法模型。例如(718. 最长重复子数组)其实就是考察LCS(Longest Common Subsequence)最长公共子序列问题。
  • 要做到这三点,一道题至少至少要刷三遍,我有的题甚至刷了有五六遍七八遍才能闭着眼AC,例如N个一组反转链表这道题我前前后后得做了有快10遍:

    • 第一遍,记在你的笔记里,想半分钟如果没思路,可以直接看答案,在初期刷题没什么思路时,不要浪费时间,直接看看正确的思路是啥。并且无需拘泥于一个题解,如果一个题解吭哧吭哧半天看不懂,那就换个题解,总要能找到一个思路和你相似、脑回路和你相近的人,迟早会把题搞明白。
    • 第二遍,在本子上画画数据结构的图,写写伪代码,这样做主要是让你的思路清晰,能讲清楚,至少能达到刷题 “第一层” 的境界。
    • 第三遍,直接什么答案都不看,上手编程,熟知考察的重点和实现的细节,以及实现过程中的各种坑。
  • 记笔记很重要,很重要,很重要!主要记录自己的易错点!

    • Leetcode的功能很棒,可以在每次你的提交后面写个备注,比如你这次做错了是因为啥,粗心还是算法没想清楚,都可以记录在leetcode的提交备注功能里。举个例子,如下图所示。

手机上的Anki备忘录用起来,anki之前主要是用来背单词的,可以根据遗忘曲线提醒你今天该复习哪个单词了。其实用在刷题上也一样,可以在anki备忘录上把同类题记在一起,anki可以根据复习时间提醒你哪一天该复习哪些内容了。在anki上的记录不用太详细,主要把算法题的思路、核心点、易错点简单写个轮廓就ok啦!可以地铁上没事也可以刷一刷。

  • 刷题的前记后忘现象很常见,不用担心,只要你针对每道题都建立了笔记文档,并且按类别进行归类整理了以后,你要做的只是把这道题的核心点再回顾一下,然后再 “闭着眼睛” 刷一遍就ok了,总要有能记住的那一遍的。

  • 不求一题多解,但求多题一解。其实除了一些比较简单的题可能会问多种解法以外(比如反转链表的递归和迭代两种写法,二叉树遍历的递归和迭代两种写法)。所以抽象思维很重要,把多道题都映射到同一个模型上,举个例子,比如“1035 不相交的线”就可以抽象成 LCS 问题。

3. 我按分类总结的题号 + 各个类型比较不错的博客资料

下面把我平时针对每道题的题号收集、博客资料收集的文档都分享给大家。

注意!这个题号并不是说就要全部都刷,因为时间来不及,一定把我上面提到的高频题按分类给刷明白了,如果有余力再把剩下的给刷了!

3.1 双指针 & 滑动窗

袁厨的双指针专题:https://mp.weixin.qq.com/s/C4ZFwyJThBJdyqbNo87isQ
袁厨的题目收集:https://mp.weixin.qq.com/s/raAfG79JZtnuOwvAGE8xMA

双指针:
lc 27 移除元素
lc 209 长度最小的子数组
lc 141 环形链表
lc 142 环形链表
lc 328 奇偶链表
lc 160 相交链表
lc 21 合并两个有序链表
lc 88 合并两个有序数组
lc 15 三数之和
lc 18 四数之和
lc 83 删除排序链表中的重复元素
lc 673. 最长递增子序列的个数
lc 300. 最长递增子序列
1004. 最大连续1的个数 III

最长递增子序列
https://blog.csdn.net/ltrbless/article/details/81318935

滑动窗:
3 无重复字符的最长子串
209 长度最小的子数组
53 最大子序和
84 柱状图中最大的矩形
239 滑动窗口的最大值
424 替换后的最长重复字符
1004 最大连续1的个数 III
1438 绝对差不超过限制的最长连续子数组
5682 lc 周赛 所有子字符串的美丽值
剑指 Offer 41 数据流中位数
剑指 Offer 42 连续子数组的最大和
剑指 Offer 59 - I 滑动窗口的最大值

  1. 无重复字符的最长子串
  2. 串联所有单词的子串
  3. 最小覆盖子串
  4. 至多包含两个不同字符的最长子串
  5. 至多包含 K 个不同字符的最长子串
  6. 长度最小的子数组
  7. 滑动窗口最大值
  8. 字符串的排列
  9. 最小区间
  10. 最小窗口子序列

3.2 递归 & 二叉树

因为 递归和二叉树 总是同时出现,所以放在一起了。

二叉树
lc 144 二叉树的前序遍历(递归 + 迭代 + morris)
lc 94 二叉树的中序遍历(递归 + 迭代 + morris)
lc 145 二叉树的后序遍历(递归 + 迭代 + morris)
lc 110 平衡二叉树
lc 112 路径总和 I
lc 113 路径总和 II
剑指 27 二叉树的镜像
剑指 28 对称的二叉树
剑指 55 - I 二叉树的深度
lc 102 二叉树的层序遍历
lc 98 验证二叉搜索树(中序遍历)
lc 129 求根到叶子节点数字之和
lc 124 二叉树最大路径和
lc 235 二叉搜索树的最近公共祖先
lc 236 二叉树的最近公共祖先
lc 226 翻转二叉树 三种方法,DFS 递归、DFS 迭代、BFS 层序
lc 39. 组合总和
lc 46. 全排列
lc 404 左叶子之和
lc 700 二叉搜索树中的搜索
lc 96 不同的二叉搜索树
lc 669 修剪二叉搜索树
lc 106 从中序与后序遍历序列构造二叉树 同 剑指 Offer 07 重建二叉树

下面是 weiwei 收集的

作者:liweiwei1419

  1. 二叉树中的最大路径和
  2. 二叉树的直径
  3. 二叉树最长连续序列
  4. 二叉树中最长的连续序列
  5. 最长同值路径
  6. 二叉树中的最长交错路径
  7. 具有所有最深节点的最小子树

3.3 递归 & 回溯

3.3.1 做题套路自我总结

所有回溯递归都是一样的套路,明确递归的对象,对一个节点进行考虑,正如二叉树一样,回溯其就是 N叉树 + 剪枝

  1. 明确递归的对象,要对哪个节点进行递归(二叉树)?还是对一张表的一个格子进行递归(岛屿问题)?还是要对一个状态进行递归(全排列树状图画出来)?
  2. 明确结束条件,到底到什么地方算是结束了,或者说达到什么条件就需要保存一下状态?
  3. 递归工作,该节点如果不满足结束条件,那对它进行一些什么操作,对它连接的节点进行什么操作?如何继续往下分叉?
  4. 返回值,根据递归工作要返回什么值(岛屿面积)?

3.3.2 题目收集

  1. 括号生成
  2. 组合总和
  3. 全排列
  4. 求根到叶子节点数字之和
  5. 路径总和 II
  6. 全排列 II
  7. 三数之和
  8. N 皇后 变态不做了!
  9. 组合总和
  10. 组合总和 II
  11. 全排列
  12. 全排列 II
  13. 组合
  14. 子集
  15. 子集 II
  16. 电话号码的字母组合
  17. 单词搜索

3.4 堆

295 数据流中位数
480 滑动窗口的中位数(难啊 不会)
215 排名前 k 的元素
569 员工薪水中位数??
4 寻找两个正序数组的中位数
347 前 k 个高频元素
703. 数据流中的第 K 大元素
剑指 40: 最小的 k 个数
480 滑动窗中位数 (大根堆 堆排 对顶堆)(难啊 不会 低频题,不做)

3.5 动态规划

509 斐波那契数
70 爬楼梯
746 使用最小花费爬楼梯
121 买卖股票的最佳时机
122 买卖股票的最佳时机
123 买卖股票的最佳时机
322. 零钱兑换
518. 零钱兑换
64 最小路径和
198 打家劫舍
213 打家劫舍 II
5 最长回文子串
120 三角形最小路径和
lc 673. 最长递增子序列的个数
lc 300. 最长递增子序列
62. 不同路径(中等):路径问题第一讲
63. 不同路径 II(中等):路径问题第二讲
64. 最小路径和(中等):路径问题第三讲
120. 三角形最小路径和(中等)
931. 下降路径最小和(中等)
1289 下降路径最小和 II(困难)
1575. 统计所有可行路径(困难)
576. 出界的路径数(中等)
1301. 最大得分的路径数目(困难)
647. 回文子串
5. 最长回文子串
718 最长重复子数组
1143 最长重复子序列
678 有效的括号字符串

3.6 贪心算法

45 跳跃游戏II
55 跳跃游戏
435 无重叠子区间
1784 检查二进制字符串字段
1785 构成特定和需要添加的.....

3.7 链表

21 合并两个有序链表
23 合并 K 个升序链表
92 反转指定位置链表
25 k 个一组反转链表
61 旋转链表
2 两数相加!!!
19 删除链表倒数第 K 个节点!
19 删除链表的倒数第N个节点 两种实现+图解 中等
21 合并两个有序链表 两种实现+图解 简单
23 合并K个升序链表 四种实现+图解 困难
24 两两交换链表中的节点 三种实现+图解 中等
25 K 个一组翻转链表 两种实现+图解 困难
61 旋转链表 两种实现+图解 中等
82 删除排序链表中的重复元素 II 三种实现+图解 中等
83 删除排序链表中的重复元素 两种实现+图解 简单
141 二叉树展开为链表 四种实现+图解 中等
138 复制带随机指针的链表 两种实现+图解 中等
141 环形链表 两种实现+图解 简单
160 相交链表 两种实现+图解 简单
203 移除链表元素 两种实现+图解 简单
206 反转链表 两种实现+图解 简单
234 回文链表 图解 简单
237 删除链表中的节点 图解 简单
876 链表的中间结点 图解 简单
328 奇偶链表

3.8 二分法

3.9 位运算

137
136
260
645
IP 与整数的互换

3.10 辅助栈

矩阵的最小面积
155 最小栈
739 每日温度
剑指 Offer 59 - II 队列的最大值
剑指 Offer 59 - I 滑动窗口的最大值
lc 239 滑动窗口的最大值
42 接雨水
496 下一个更大元素 I
503 下一个更大元素 II
1081 不同字符的最小子序列

  1. 接雨水(困难) 暴力解法、优化、双指针、单调栈
  2. 每日温度(中等) 暴力解法 + 单调栈
  3. 下一个更大元素 I(简单) 暴力解法、单调栈
  4. 去除重复字母(困难) 栈 + 哨兵技巧(Java、C++、Python)
  5. 股票价格跨度(中等) 「力扣」第 901 题:股票价格跨度(单调栈)
  6. 移掉K位数字
  7. 最短无序连续子数组

3.11 前缀和

  1. 子数组异或查询
  2. 删除排序链表中的重复元素 II

3.12 拓扑排序

  1. 课程表
  2. 课程表 II

4. 后记

刷题真的很重要,不管是应届求职,还是社招跳槽,都需要体现出一定的算法能力才能过关。

希望这篇分享能帮助到大家!祝大家都拿到满意的offer!


 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/419559.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JavaWeb笔记整理13——Mybatis

目录 Mybatis介绍 删除 预编译SQL SQL注入 新增 更新 查询 数据封装 条件查询 XML映射文件 动态SQL 更新案例 foreach Mybatis介绍 删除 预编译SQL SQL注入 新增 更新 查询 数据封装 条件查询 XML映射文件 动态SQL <if> 更新案例<set> foreach &l…

AIGC简化文件管理:Python自动重命名Word和PDF文件

1.背景 大家应该也有遇到&#xff0c;自己电脑有很多文件命名不合理的文件&#xff0c;比如&#xff1a;文件1、想法3 &#xff0c;当你长时间再看到这个文件的时候&#xff0c;已经很难知道文件内容。 今天我们将借助AIGC的编码能力&#xff0c;帮我们生成一个批量改文件名的…

Linux内核编程(十五)网络设备驱动

本文目录 一、常见的网络协议二、网络模型二、网络数据的封装和解封装二、抓包工具wireshark三、传输介质四、RJ-45接口1. 百兆网口2. 千兆网口 五、PHY芯片1. 网络变压器的作用2. PHY芯片类型判断 六、MAC控制器七、MAC控制器与PHY芯片连接方式1. MII接口方式&#xff08;百兆…

CSS学习13--学成网例子

CSS例子 学成网 需要使用的图片&#xff1a; 代码&#xff1a; <html><head><style>/*CSS初始化*/* { /*清除内外边框*/padding: 0;margin: 0;}ul {list-style: none; /*清除列表样式*/}.clearfix:before,.clearfix:after { /*清除浮动*/content: &qu…

【Java毕业设计】基于SpringBoot+Vue+uniapp的农产品商城系统

文章目录 一、系统架构1、后端&#xff1a;SpringBoot、Mybatis2、前端&#xff1a;Vue、ElementUI4、小程序&#xff1a;uniapp3、数据库&#xff1a;MySQL 二、系统功能三、系统展示1、小程序2、后台管理系统 一、系统架构 1、后端&#xff1a;SpringBoot、Mybatis 2、前端…

计算机毕业设计SpringBoot+VUE自动灌装生产线 MES 系统设计

采用 B/S 架构&#xff0c;MES 应用软件通过 TCP/IP 协议与自动灌装生产线上的各个工作单元中的 PLC 控制器进行通信&#xff0c;查询或采集由 PLC 控制器采集的生产数据。通过 JAVA 构建的平台与数据库进行连接&#xff0c;实现灌装生产线的生产管理、订单管理、质量管理和数据…

问题: java.sql.SQLException:The server time zone value ‘�й���׼ʱ��‘

原文: Mybatis PlusThe server time zone valuehis unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc time zone value if you want to uti…

深入理解数据库的 4NF:多值依赖与消除数据异常

在数据库设计中&#xff0c; "范式" 是一个常常被提到的重要概念。许多初学者在学习数据库设计时&#xff0c;经常听到第一范式&#xff08;1NF&#xff09;、第二范式&#xff08;2NF&#xff09;、第三范式&#xff08;3NF&#xff09;以及 BCNF&#xff08;Boyce-…

C++操作符重载实例(独立函数)

C操作符重载实例&#xff0c;我们把坐标值CVector的加法进行重载&#xff0c;计算c3c1c2时&#xff0c;也就是计算x3x1x2&#xff0c;y3y1y2&#xff0c;今天我们以独立函数的方式重载操作符&#xff08;加号&#xff09;&#xff0c;以下是C代码&#xff1a; c1802.cpp源代码…

c++进阶——哈希表

嗨喽大家好呀&#xff0c;今天阿鑫给大家带来的是c进阶——哈希表&#xff0c;好久不见啦&#xff0c;下面让我们进入本节博客的内容吧&#xff01; c进阶——哈希表 枚举的介绍unordered系列的底层结构哈希表的改造 哈希是一种思想(映射)&#xff0c;哈希表(值和存储位置建立…

搭建Docker私有仓库管理本地的Docker镜像,通过harbor实现Web UI访问和管理私有仓库

要在本地搭建一个Docker私有仓库&#xff0c;你可以按照以下步骤进行设置&#xff1a; 安装Docker 确保你已经安装了Docker。如果还没有安装&#xff0c;可以按照官方指南进行安装&#xff1a; 对于Ubuntu系统&#xff0c;你可以运行以下命令来安装Docker&#xff1a; sudo ap…

十一、C语言:字符串函数

目录 一、strlen 二、strcpy 三、strcat 四、strcmp 五、strstr 六、strtok 七、strerror 一、strlen 注意&#xff1a;strlen()函数的返回值是size_t&#xff0c;两个size_t相减仍为无符号数 int main() {char arr[10] "abc";char brr[10] "abc123&quo…

OpenCV结构分析与形状描述符(11)椭圆拟合函数fitEllipse()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 围绕一组2D点拟合一个椭圆。 该函数计算出一个椭圆&#xff0c;该椭圆在最小二乘意义上最好地拟合一组2D点。它返回一个内切椭圆的旋转矩形。使…

【数据结构与算法 | 灵神题单 | 删除链表篇】力扣3217, 82, 237

总结&#xff0c;删除链表节点问题使用到列表&#xff0c;哈希表&#xff0c;递归比较容易超时&#xff0c;我觉得使用计数排序比较稳&#xff0c;处理起来也不是很难。 1. 力扣3217&#xff1a;从链表中移除在数组中的节点 1.1 题目&#xff1a; 给你一个整数数组 nums 和一…

【Linux】应用层http协议

一、HTTP协议 1.1 简要介绍一下HTTP 我们在网络的应用层中可以自己定义协议&#xff0c;但是&#xff0c;已经有大佬定义了一些现成的&#xff0c;非常好用的应用层协议&#xff0c;供我们直接使用&#xff0c;HTTP&#xff08;超文本传输协议&#xff09;就是其中之一。 在互…

yolo算法小结

文章目录 yolov1工作原理限制 yolov2网络结构改进点 yolov3改进点 yolov4网络结构图改进点 yolov5改进点 参考资料 YOLO的核心思想是将物体检测视为一个回归问题&#xff0c;它不采用传统的区域提议方法&#xff0c;而是通过单一的神经网络对整个图像进行预测。这意味着YOLO只需…

C/C++两点坐标求距离以及C++保留两位小数输出,秒了

目录 1. 前言 2. 正文 2.1 问题 2.2 解决办法 2.2.1 思路 2.2.2 代码实现 3. 备注 1. 前言 依旧是带来一个练手的题目&#xff0c;目的就一个&#xff0c;方法千千万&#xff0c;通向终点的方式有很多种&#xff0c;没有谁与谁&#xff0c;我们都是为了成为更好的自己。…

使用亚马逊Bedrock的Stable Diffusion XL模型实现文本到图像生成:探索AI的无限创意

引言 什么是Amazon Bedrock&#xff1f; Amazon Bedrock是亚马逊云服务&#xff08;AWS&#xff09;推出的一项旗舰服务&#xff0c;旨在推动生成式人工智能&#xff08;AI&#xff09;在各行业的广泛应用。它的核心功能是提供由顶尖AI公司&#xff08;如AI21 Labs、Anthropic…

python中的循环结构

注意&#xff1a;range&#xff08;&#xff09;函数 累加和&#xff1a; 注意&#xff1a;if 下面如果有好几行&#xff0c;只执行一行 print必须和 for 开头相同格数 例题&#xff1a;水仙花数 注意在print语句中&#xff0c;一句好“ 。。。。。 ”后面必须有逗号然后再写变…

C++(一)----C++基础

1.C的发展史 C语言诞生后&#xff0c;很快普及使用&#xff0c;但是随着编程规模增大且越来越复杂&#xff0c;并且需要高度的抽象和建模时&#xff0c;C语言的诸多短板便表现了出来&#xff0c;为了解决软件危机&#xff0c;上世纪八十年代&#xff0c;计算机界提出了oop&…