当前位置: 首页 > news >正文

算法该不该刷?如何高效刷算法?

一、算法该不该刷?

最近有小伙伴向我咨询一个问题,就是算法该不该刷,该如何刷算法呢?这个问题可谓太大众化了,只要你去某乎、某度搜索一下相关的解答,会有无数种回答,可见这个问题困扰了多少学习计算机的同学们,但不管回答有多少种,总结一句话就是“算法必须刷!”。

当然,这个回答其实也并不绝对,算法也可以不刷,在我看来取决于两个原因:

其一,计算机出来工作也分很多种,有前端、后端、算法、测试、运维、大数据、人工智能、嵌入式等很多方向,不同方向的学习内容也不一样,因此算法也并不是所有类型的工作都得学习的。

其二,如果你的志向没有那么远大,只是想能够找份工作上班,而不追求公司的规模的话,那你也可以不刷算法,因为正常的小公司对算法的要求并不注重,他们想要的是能够入职很快就可以干活的人,只要你能够敲代码,那他们就会录取你;而一些规模比较大的公司,他们对算法的要求还是比较强的,因为大公司注重求职者的基本功,在他们看来算法是可以综合考察求职者的基本功是否扎实,至于技术栈是否扎实他们其实并不是重点(当然技术栈功底也是比较看重的),因为他们有财力和能力来培养员工的技术能力。上述表述是针对于应届生和初级程序员对于求职找工作而言的,中高级程序员另说。

综上所述,我认为什么样的人应该刷算法呢,未来从事的工作譬如算法、后端、大数据这类的工作,需要算法的工作门类,并且你所追求的公司是属于中大厂的,那么算法这一关是一定要过的,这些公司一般在面试前会有一次笔试,笔试就会考察算法,一般考察2道,笔试过不了的话正常连面试机会也没有的。当然考察的算法也不会很难,一般都是简单到中等的难度,很少会有困难的难度,正常面试比较难的题目也就在LeetCode中等难度题目中的中等难度那样。当然越大的公司,对于算法的考察会越注重,比如腾讯、阿里、字节等这些一线大厂,通常会有三次以上的面试,而每次面试都可能考察一道算法题,可想而知算法的重要性。

在我看来,会问“算法该不该刷”这个问题的人一共有两种,一种是刚入门计算机没多久的人,还有一种是刷了几道算法觉得有难度想放弃的人。因为我本人就是经历过这两个阶段。一开始的时候,我刚入门计算机,在了解到面试需要考察算法这里的时候,我就开始怀疑,我学的是Java后端开发,明明是敲代码做开发的,又不是算法工程师,为什么要刷算法呢?所以我有了“算法该不该刷”的问题。再后来,我刷了几道算法,一开始刷算法特别难受,因为没怎么接触过,刷起来完全没有思路,而且在刷算法的时候,敲代码其实也会有点卡壳,这才了解到自己的基本功也不是很扎实。碰了壁,遇到了麻烦,想放弃,自然就会想“算法那该不该刷”这个问题,总想着避开算法。但之后通过不断的面试发现,算法不刷还真不行。因为面试一些中型公司的时候,连面试前的笔试都过不了,更别谈拿到面试机会了。所以后面就把算法刷了起来,虽然有些难度,但刷了一些题之后,适应了其实觉得,也没有那么难了。

总结:算法该不该刷?算法必须刷起来好吧!

二、如何高效刷算法?

相信很多小伙伴都会有这么个疑问,我知道算法的重要性了,但我却不知道算法该如何刷,这么多算法该从何下手,哪些算法必须刷,哪些算法又是可以不刷的?

那么,接下来的内容我将把我从0到1刷算法的一些经验和途径分享给大家,希望看到这篇文章的小伙伴可以少走些弯路,那么我们直奔主题:

  1. 刷算法最重要的不是敲代码,而是思路。很多小伙伴在拿到题目的时候第一反应就是敲代码,边敲边想。其实这是错误的,我们拿到题目第一时间应该是想思路,而不是着急做题。我们可以花一些时间把思路想一想,在确保思路想通的情况下再去敲代码,这样做题就会比较顺畅。就像写作文一样,拿到作文题目不是直接下笔,而是构思。

  1. 刷算法一定要分类刷。什么意思呢,就是你可以按照算法的分类进行刷题,算法分字符串、链表、栈、二叉树等类型的题目,这段时间只刷字符串,待字符串刷的差不多的时候再开始刷链表类题目,这样子刷题的效率会事半功倍。反之刷题不按分类刷,随意刷题的话,可能会事倍功半。因为每一种类型的题目都有对应的一些套路和方法,刷多了就能举一反三了,一拿到此类题目就知道该如何下手。

  1. 刷算法一定要刷多遍,不要只刷一遍。当我们刷算法的时候,既要学会这道题的思路,又要会敲代码。而我们的大脑对某一件事的记忆力会随着时间的增加而下降,所以刷算法一定要多刷几遍,这样才能保证我们刷过的题可以成为自己大脑题库中的题,而不是题库中的过客。

至于多刷几遍也是有方法的。拿我的方法来举例,一般我会刷3遍,第一遍是只刷思路,不敲代码,拿到一道题目的时候,我会直接看思路,思路可以明白的情况下再去看代码,代码可以看懂的情况下,我会将这道题整理到我的博客上,用自己的话把这道题的思路记下来,然后把代码也copy到文章中,这道题就算刷了第一遍。

等这类题目刷完的时候,我会把所有的题目再刷第二遍,注意是刷完此类题目的时候。第二遍我就不会看思路,只看题目,然后自己想思路,想好之后去把代码也实现了。第二遍我会专门记录成一篇文章,文章中记录着我刷每一道题目的感受,比如说“此题刷题顺利”、“此题思路不顺”、“此题代码不顺”等。这样就会方便我第三次刷题。

接着过段时间后,我会开始第三遍刷题,把第二遍刷题时不顺的题目再刷一遍,这样就将此类算法题刷的差不多了。

注意:一定要分类刷题,包括第二遍第三遍也是分类刷题,一定要总结刷题方法和套路。

  1. 刷算法一定要总结,不能只有输入而没有输出。就像第3点中我说我的刷题方法一样,刷过的题目输出出来,方便以后的复盘和总结。如果只靠输入,而不输出的话,大脑再遇到刷过的题目的时候,可能也都没什么印象了。

  1. 刷题一定要循环渐进,刚开始的时候先刷简单的,然后再刷中等,再到困难。大家在刷题的时候可能会存在一个误区,就是一上来就刷难题,以为如果我把难题都刷会了,那简单的题目也就不在话下。其实不然,每道题都有各自的方法,他们相互关联但又各自独立,每道题目的思路都不相同,所以难得题目会解并不代表简单的题目也可以解决,反而在刷困难的题目的时候,会因为毫无思路而怀疑人生,最后刷题刷的痛苦不已。不要问我怎么知道的,问就是经历过。

  1. 刷算法题不建议拿大量的时间进行刷题。刷算法题可以每天刷一两道,后面适应了可以一天几道的刷,但前提是不要拿大量的时间花在刷题上,毕竟从事的工作不是算法工程师,还是要以主线学习内容为主。每天花一两个小时来刷算法就完全可以了,把算法和其他学习内容穿插着来进行。

  1. 掌握数据结构这门课。数据结构这门课还是很重要滴,如果没学过的同学或者学过但学的不是很好的同学,建议重新学一遍,但我建议不要一次性把整门课都学完,而是边学边刷题。比如刷到链表类题目的时候,可以把链表那一章的数据结构看了,然后再去刷题。刷题刷到哪,数据结构学到哪。这样会事半功倍。

以下是一些我刷题的途径和网站,大家可以拿去参考:

  1. 《剑指Offer》这本书,里面的题目都是经典题目,面试常考的,必须刷完。

2.LeetCode网站,里面有大量的算法题可供大家刷,但并不是所有题都要刷的,下面两个刷题网站可谓精品中的精品,我都不舍得分享出来,但为了大家可以快速进步,我还是决定与大家一起进步。

(1)Leetcode高频题:https://www.nowcoder.com/ta/leetcode

(2)各大公司面试高频题目(含考察频次):https://codetop.cc/home

3.数据结构:

时间紧的同学可以只看这个常见数据结构和算法知识点:https://b23.tv/pne6moZ

数据结构基础:https://b23.tv/al18Y8f

4.剑指offer对应的视频讲解:(个人觉得讲的不是很好,不如直接看题解)

https://m.bilibili.com/video/BV1ZK4y1b7Xn?from=search&seid=15576281624721013887&spm_id_from=333.337.0.0

5.数据结构几大排序查找算法是必知必会的,不论公司规模大小都会考到的,诸如快速排序、归并排序、二分查找等。

八大排序算法_Java运动猿的博客-CSDN博客

四大查找算法_Java运动猿的博客-CSDN博客

总结重点:

1.先掌握解题思路,代码部分可以留着第二遍,记得整理。刷算法过程中遇到诸如红黑球,链表栈等数据结构知识,也要整理下。

2.刷算法的时候一定要刷多遍,刷剑指offer和牛客网148道leetcode。

3.容易的,会的先刷,难的留着第二遍或第三遍再去理解,大局为重。

4.先刷思路,思路能懂的前提下再去看代码,或者通过看代码辅助理解思路也可以。要先会说怎么解,然后再写代码。

5.刷一题整理一题,一定要整理,不整理很容易忘,用自己的话或者代码再输出一下,标记好需要注意的点,便于后期回顾复盘。

写在最后:
相信看到这里的小伙伴们都已经踌躇满志,迫不及待地想去发现新大陆了吧哈哈!此篇文章是我踩了无数的坑、碰了无数的壁总结出来的一些经验和刷题门路,可谓呕心沥血。别问我刷题的过程有多艰辛,问就是总结经验的时候真的很爽。希望这篇文章可以帮助到有需要的小伙伴们,早日踏上理想的航线。如果有需要《剑指offer》、《大话数据结构》这两本电子书的,可以关注我并私信给我,我会分享给你的。

最后的最后:码字不易,如果你觉得此篇文章对你有帮助的话,还望动动手指点个赞支持支持我吧!

相关文章:

算法该不该刷?如何高效刷算法?

一、算法该不该刷?最近有小伙伴向我咨询一个问题,就是算法该不该刷,该如何刷算法呢?这个问题可谓太大众化了,只要你去某乎、某度搜索一下相关的解答,会有无数种回答,可见这个问题困扰了多少学习…...

Allegro如何在关闭飞线模式下查看网络连接位置操作指导

Allegro如何在关闭飞线模式下查看网络连接位置操作指导 在用Allegro做PCB设计的时候,有时会因为设计需要,关闭飞线显示。 如何在关闭飞线显示模式下查看网络连接的位置,如下图 除了能看到网络连接的点位以外,还能看到器件的pin Number 如何显示出这种效果,具体操作如下 …...

啊哈 算法读书笔记 第 1 章 一大波数正在靠近——排序

目录 排序算法: 时间复杂度: 排序算法和冒泡排序之间的过渡: 冒泡排序 冒泡排序和快速排序之间的过渡: 快速排序 排序算法: 首先出场的是我们的主人公小哼,上面这个可爱的娃就是啦。期末考试完了老…...

Servlet笔记(5):HTTP请求与响应

1、HTTP请求 当浏览器请求网页时,它会向Web服务器发送特定信息,这些信息不能被直接读取,而是通过传输HTTP请求时,封装进请求头中。 有哪些头信息? 头信息描述Accept这个头信息指定浏览器或其他客户端可以处理的 MIME…...

信号的运算与变换

目录 前言 本章内容介绍 信号的运算与变换 相加 相乘 时移 反折 尺度变换 微分(差分) 积分(累加) 信号的奇偶求解 信号的实虚分解 合适的例题 1、时移反折 2、时移尺度 3、时移反折尺度 4、反求x(t) 前言 《信号…...

【GO】K8s 管理系统项目9[API部分--Secret]

K8s 管理系统项目[API部分–Secret] 1. 接口实现 service/dataselector.go // secret type secretCell corev1.Secretfunc (s secretCell) GetCreation() time.Time {return s.CreationTimestamp.Time }func (s secretCell) GetName() string {return s.Name }2. Secret功能…...

ESP32 Arduino EspNow点对点双向通讯

ESP32 Arduino EspNow点对点双向通讯✨本案例分别采用esp32和esp32C3之间点对点单播无线通讯方式。 🌿esp32开发板 🌾esp32c3开发板 🔧所需库(需要自行导入到Arduino IDE library文件夹中,无法在IDE 管理库界面搜索下载到该库)&am…...

Linux SID 开发指南

Linux SID 开发指南 1 前言 1.1 编写目的 介绍Linux 内核中基于Sunxi 硬件平台的SID 模块驱动的详细设计,为软件编码和维护提供基 础。 1.2 适用范围 内核版本Linux-5.4, Linux-4.9 的平台。 1.3 相关人员 SID 驱动、Efuse 驱动、Sysinfo 驱动的维护、应用开…...

Matlab进阶绘图第2期—线型热图

线型热图由共享X轴的多条渐变直线组成,其颜色表示某一特征值。 与传统热图相比,线型热图适应于X轴数据远多于Y轴(条数)的情况,可以很好地对不同组数据间的分布情况进行比较,也因此可以在一些期刊中看到它的…...

【Redis中bigkey你了解吗?bigkey的危害?】

一.Redis中bigkey你了解吗?bigkey的危害? 如果面试官问到了这个问题,不必惊慌,接下来我们从什么是bigkey?bigkey划分的类型?bigkey危害之处? 二.什么是bigkey?会有什么影响&#xff…...

C++回顾(一)——从C到C++

前言 在学习了C语言的基础上&#xff0c;C到底和C有什么区别呢&#xff1f; 1.1 第一个C程序 #include <iostream>// 使用名为std的命名空间 using namespace std;int main() {// printf ("hello world\n");// cout 标准输出 往屏幕打印内容 相当于C语言的…...

CRF条件随机场 | 关键原理+面试知识点

😄 CRF之前跟人生导师:李航学习过,这里结合自己的理解,精简一波CRF,总结一下面试中高频出现的要点。个人觉得没网上说的那么复杂,我看网上很大部分都是一长篇先举个例子,然后再说原理。没必要原理其实不难,直接从原理下手更好理解。 文章目录 1、概率无向图(马尔可夫…...

秒懂算法 | 回归算法中的贝叶斯

在本文中,我们会用概率的观点来看待机器学习模型,用简单的例子帮助大家理解判别式模型和生成式模型的区别。通过思考曲线拟合的问题,发现习以为常的损失函数和正则化项背后有着深刻的意义 01、快速理解判别式模型和生成式模型 从概率的角度来理解数据有着两个不同的角度,假…...

用Netty实现物联网01:XML-RPC和JSON-RPC

最近十年,物联网和云计算、人工智能等技术一道,受到业内各方追捧,被炒得火热,甚至还诞生了AIoT这样的技术概念。和(移动)互联网不同,物联网针对的主要是一些资源有限的硬件设备,比如监控探头、烟雾感应器、温湿度感应器、车载OBD诊断器、智能电表、智能血压计等。这些硬…...

腾讯云服务器centos7安装python3.7+,解决ssl问题

使用requests模块访问百度&#xff0c;报错如下&#xff1a; requests.exceptions.SSLError: HTTPSConnectionPool(hostwww.baidu.com, port443): Max retries exceeded with url: / (Caused by SSLError("Cant connect to HTTPS URL because the SSL module is not avail…...

C++【模板STL简介】

文章目录C模板&&STL初阶一、泛型编程二、函数模板2.1.函数模板概念2.2.函数模板格式2.3.函数模板的实例化2.4.模板参数的匹配原则三、 类模板3.1.模板的定义格式3.2.类模板的实例化STL简介一、STL的概念、组成及缺陷二、STL的版本C模板&&STL初阶 一、泛型编程…...

该学会是自己找bug了(vs调试技巧)

前言 &#x1f388;个人主页:&#x1f388; :✨✨✨初阶牛✨✨✨ &#x1f43b;推荐专栏: &#x1f354;&#x1f35f;&#x1f32f; c语言初阶 &#x1f511;个人信条: &#x1f335;知行合一 &#x1f349;本篇简介:>:介绍c语言初阶的最后一篇.有关调试的重要性. 金句分享…...

Redis大全(概念与下载安装)

目录 一、概念 1.非关系型数据库&#xff08;NoSQL&#xff09;的介绍 2.什么是redis 3.redis的作者 4.Redis的特点 5.redis的应用场景 6.高度概括知识 一、二 缓存穿透、缓存击穿、缓存雪崩的概念 &#xff08;一&#xff09;缓存穿透 &#xff08;二&#xff09;缓…...

指针的进阶【上篇】

文章目录&#x1f4c0;1.字符指针&#x1f4c0;2.指针数组&#x1f4c0;3.数组指针&#x1f4bf;3.1.数组指针的定义&#x1f4bf;3.2. &数组名VS数组名&#x1f4bf;3.3.数组指针的使用&#x1f4c0;1.字符指针 int main() {char ch w;char* pc &ch;// pc就是字符指…...

MATLAB | 如何用MATLAB绘制花里胡哨的山脊图

本期推送教大家如何绘制各种样式的山脊图&#xff0c;这里做了一个工具函数用来实现好看的山脊图的绘制&#xff0c;编写不易请多多点赞&#xff0c;大体绘制效果如下&#xff1a; 依旧工具函数放在文末。 教程部分 0 数据准备 数据为多个一维向量放在元胞数组中&#xff0c;…...

《Playwright:微软的自动化测试工具详解》

Playwright 简介:声明内容来自网络&#xff0c;将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具&#xff0c;支持 Chrome、Firefox、Safari 等主流浏览器&#xff0c;提供多语言 API&#xff08;Python、JavaScript、Java、.NET&#xff09;。它的特点包括&a…...

React19源码系列之 事件插件系统

事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)

引言&#xff1a;为什么 Eureka 依然是存量系统的核心&#xff1f; 尽管 Nacos 等新注册中心崛起&#xff0c;但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制&#xff0c;是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...

今日科技热点速览

&#x1f525; 今日科技热点速览 &#x1f3ae; 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售&#xff0c;主打更强图形性能与沉浸式体验&#xff0c;支持多模态交互&#xff0c;受到全球玩家热捧 。 &#x1f916; 人工智能持续突破 DeepSeek-R1&…...

k8s业务程序联调工具-KtConnect

概述 原理 工具作用是建立了一个从本地到集群的单向VPN&#xff0c;根据VPN原理&#xff0c;打通两个内网必然需要借助一个公共中继节点&#xff0c;ktconnect工具巧妙的利用k8s原生的portforward能力&#xff0c;简化了建立连接的过程&#xff0c;apiserver间接起到了中继节…...

QT: `long long` 类型转换为 `QString` 2025.6.5

在 Qt 中&#xff0c;将 long long 类型转换为 QString 可以通过以下两种常用方法实现&#xff1a; 方法 1&#xff1a;使用 QString::number() 直接调用 QString 的静态方法 number()&#xff0c;将数值转换为字符串&#xff1a; long long value 1234567890123456789LL; …...

C++八股 —— 单例模式

文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全&#xff08;Thread Safety&#xff09; 线程安全是指在多线程环境下&#xff0c;某个函数、类或代码片段能够被多个线程同时调用时&#xff0c;仍能保证数据的一致性和逻辑的正确性&#xf…...

C# 求圆面积的程序(Program to find area of a circle)

给定半径r&#xff0c;求圆的面积。圆的面积应精确到小数点后5位。 例子&#xff1a; 输入&#xff1a;r 5 输出&#xff1a;78.53982 解释&#xff1a;由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982&#xff0c;因为我们只保留小数点后 5 位数字。 输…...

Android第十三次面试总结(四大 组件基础)

Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成&#xff0c;用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机&#xff1a; ​onCreate()​​ ​调用时机​&#xff1a;Activity 首次创建时调用。​…...

JavaScript 数据类型详解

JavaScript 数据类型详解 JavaScript 数据类型分为 原始类型&#xff08;Primitive&#xff09; 和 对象类型&#xff08;Object&#xff09; 两大类&#xff0c;共 8 种&#xff08;ES11&#xff09;&#xff1a; 一、原始类型&#xff08;7种&#xff09; 1. undefined 定…...