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

news2025/4/5 19:46:48

一、算法该不该刷?

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

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

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

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

综上所述,我认为什么样的人应该刷算法呢,未来从事的工作譬如算法、后端、大数据这类的工作,需要算法的工作门类,并且你所追求的公司是属于中大厂的,那么算法这一关是一定要过的,这些公司一般在面试前会有一次笔试,笔试就会考察算法,一般考察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》、《大话数据结构》这两本电子书的,可以关注我并私信给我,我会分享给你的。

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Ruoyi-Cloud框架学习-【08 前端、后端服务打包】

后端打包部署 在ruoyi项目的bin目录下执行package.bat打包Web工程,生成war/jar包文件。 然后会在各个项目下生成target文件夹、包含war或jar 提示 不同模块版本会生成在ruoyi/ruoyi-xxxx模块下target文件夹 部署工程文件 1、jar部署方式 使用命令行执行&#xf…

docker学习(三):docker镜像分层原理及本地镜像推送到阿里云或私服

文章目录前言docker镜像分层加载原理docker镜像commit操作产生新镜像本地镜像发布到阿里云将本地镜像推送到私有库前言 大家好,这是我学习docker系列的笔记文章,目标是掌握docker,为后续学习K8s做准备。本文记录了docker镜像分层加载的原理,…

DSP_TMS320F28377D_使用定时器实现<获取代码块运算时间>的功能

前言 给大家拜个晚年,此博客是2023年的第一篇博客,希望在2023年我与各位大佬共同进步。以前在STM32上实现过相关的功能,链接如下: STM32_使用定时器实现<获取代码块运算时间>的功能_江湖上都叫我秋博的博…

发表计算机 SCI 论文有多难? - 易智编译EaseEditing

发表SCI论文的对本科生来说点难度,一般论文的水平是这样:普刊<核心<SCI。 不同的专业都可以发SCI,只是影响因子高低不用而已,有的领域分值高,有的偏低。 就是说不同领域SCI期刊,影响…

液晶12864显示图片

液晶12864简介12864是128*64点阵液晶模块的点阵数简称。基本参数1、低电源电压(VDD:3.0~5.5V)。2、显示分辨率:12864 点。3、内置汉字字库,提供8192 个1616 点阵汉字。4、内置128 个168 点阵字符。5、2MHZ时钟频率。6、显示方式&a…

HCIA-Datacom题库2023最新放送,能答对60%就拿下证书

HCIA的学习是网络工程师这条路的开始。如果你准备好了,就往下看!HCIA认证是华为公司认证体系中的初级认证,是一个入门认证,它包含的技术很简单,只是一个单核心的小网络,距离一个合格的网络工程师还有一段距…

电子文件全程管理与信息安全保障的并行之路

这篇文章是笔者2014年发表在《保密科学技术》第6期的一篇文章,时隔8年温习了一遍之后感觉还是有一定的可取之处,时至今日依然没有明显落伍,所以在修改完善其中部分内容之后分享给大家。 原文 Part. 01 引言 从上世纪八九十年代开始&#xff…

Nacos目录挂载并实现持久化

目录挂在docker pull ndocker pull nacos/nacos-server:v2.0.4 acos/nacos-server:v2.0.4 docker run -d --name nacos -e JVM_XMS256m -e JVM_XMX512m -e MODEstandalone --restartalways -p 8848:8848 nacos/nacos-server:1.4.2docker run -d --name nacos -e JVM_XMS256m -e…

作为一个合格的测试工程师如何跟开发有效沟通?

测试人员每天的例行工作之一就是与开发沟通代码改动,并对改动进行功能回归,我们称之为测试范围确认。对于每个测试人员来说,可能都会遇到以下问题: 1、拿到一个代码改动后我首先做什么? 2、跟开发沟通时问些什么&…

【Cocos新手入门】cocos creator操作 canvas绑定脚本及通过代码操作label组件变化的方法

本篇文章主要讲解利用cocos creator操作 canvas绑定脚本及通过代码操作label组件变化的方法 作者:任聪聪 日期:2023年1月31日 本篇文章仅适合cocos 2.4.3引擎版本下进行练习,其他版本可参考只有写法不同。 基本的操作说明 步骤一、通过cocos…

OJ万题详解––木板上的蚂蚁(C++详解)

题目 题目描述 有一块木板,长度为 n 个 单位 。一些蚂蚁在木板上移动,每只蚂蚁都以 每秒一个单位 的速度移动。其中,一部分蚂蚁向 左 移动,其他蚂蚁向 右 移动。 当两只向 不同 方向移动的蚂蚁在某个点相遇时,它们会同…

MongoDB 数据库操作

场景: 已知广告点击数据的记录已经存在,数据统计在mongodb中,现在要统计广告列表pv和uv。 思路: 这个时候就想到mysql的聚合查询group、count、distinct,但是于是就找了好多文档,发现mongodb的语法和mys…

“易”起涨知识|一文告诉你数字化生产的优势

在信息化高速发展的时代,企业工厂的数字化转型已经不是想不想转的问题,而是必须得转的形势。 智慧工厂是现代工厂信息化发展的新阶段。是在数字化工厂的基础上,利用物联网的技术和设备监控技术加强信息管理和服务;清楚掌握产销流…

Dart语法学习-变量

一、 创建Dart File Hello, World void main() {print(Hello world); }Log: Hello world 二、变量 1.Dart 支持类型推断。 var name Voyager I;var year 1977;var antennaDiameter 3.7;var flybyObjects [A1, A2, A3, A4];var image {tags:[saturn],url:www.baidu,com};…

王道操作系统笔记(四)———— 进程同步与互斥

文章目录一、同步与互斥的概念1.1 同步与互斥的基本概念1.2 临界资源与共享资源1.3 独占设备与共享设备二、实现临界区互斥的基本方法2.1 软件实现方法2.1.1 单标志法2.1.2 双标志先检查法2.1.3 双标志后检查法2.1.4 Peterson 算法2.1.5 软件实现方法总结2.2 硬件实现方法2.2.1…

【电子通识】查找硬件学习资料的方法

做为一名硬件工程师,在工作中会经常遇到一些问题,这些问题最开始可能也并不知道是什么原因。对于这些异常现象,我们可能需要深入去了解电路原理或器件特性等方式,从原理上理解并解决。当再次遇到相同或相似的问题时,我…

Python爬虫2--数据解析方法:bs4库的使用和案例

目录标题数据解析1、BeautifulSoup库1.1 BeautifulSoup库入门1.1.1 BeautifulSoup类的基本元素:1.1.2 基于bs4库的HTML内容遍历方法1.1.3 基于bs4库的HTML格式化和编码1.2 信息组织和提取方法1.2.1 信息标记的三种形式:xml,json,yaml1.2.2 三种信息标记形…

360数据恢复如何操作?360安全卫士恢复误删文件的方法(详解)

3 60安全 卫士属于一款杀毒软件,这是很多人都知道的事情。但是你知道吗?3 60安全 卫士还有一个免费功能,就是文件恢复功能。 当文件被误删,电脑回收站又找不到,你可以尝试通过3 60里面的文件恢复功能来进行数据恢复。…

Leetcode:62. 不同路径、63. 不同路径 II(C++)

目录 62. 不同路径 问题描述: 实现代码与解析: 深度优先(超时): 原理思路: 动态规划: 原理思路: 数学方法: 原理思路: 63. 不同路径 II 问题描述&…

AcWing蓝桥杯AB组辅导课09、复杂DP

文章目录前言一、复杂DP例题例题1:AcWing 1050. 鸣人的影分身(线性dp)分析题解:DP例题2:AcWing 1047. 糖果(背包问题变形)分析题解:DP(01背包问题变形)例题3&…