关于算法学习和刷题的建议
大家好,我是方圆。最近花时间学了学算法,应该算是我接触Java以来第一次真正的学习它,这篇帖子我会说一些我对算法学习的理解,当然这仅仅是浅浅的入算法的门,如果想深挖或者是有基础的人想提升自己,我觉得这篇文章不合适;如果你是算法小白或者是大一、大二有充裕时间的同学,它可能真的稍微有一点点帮助。
1. 交代背景
非科班转码近两年才开始学习算法,之前一切的算法知识全部来自《算法图解》(一本基础性的漫画算法小册)和百来到LeetCode题目,这也导致了我算法知识全是一块一块的,完全没办法衔接起来,面试题也仅仅只是对刷过或类似的题能解,纯纯复刻高三“题海战术”。
2. 算法学习开始的契机
一次工作的间隙,正得意于自己提交的代码如此“简洁”时,便听见了“方圆,你看看这个方法,可以一次遍历完成,但你做了两次遍历,而且还不好读!”
这番提醒对我来说是当头一棒,心想“你这小欻欻!敢对我的整洁代码有意见?!”,便强装嘴硬:咱俩考虑这个方法的角度不同,吧啦吧啦解释一番…
但我回头还是把这个方法的执行逻辑改了,这开始让我意识到,我对算法很不敏感,也从来不会在时间复杂度上去考虑问题,从此便埋下了算法学习的种子。
而种子的开花结果是在某算法大佬直言不讳下催化促成的。一次有幸向大佬的算法开源仓库提交章节贡献,本以为自己写的逻辑清晰,简单易懂,但是在大佬的严格审核下,被批的体无完肤:“你可能更适合写一些便基础的内容…”,一下就让我不值几两的自尊心粉碎,发誓不学好算法不罢休。
3. 学习路线
接下来是主要内容,分算法和LeetCode两部分。知识的来源全部来自书,没有视频,我个人也不倾向选择视频学习,我觉得书籍在很大程度上是知识最好的传播媒介。
算法
- 《算法(第四版)》: 思来想去我还是想把这本书放在最前面,虽然它是一本不太好读的大部头,翻译欠佳(比如把指针/Java引用翻译成链接…),但是如果你有耐心且时间充裕的话,还是希望你能够选择去读经典的书籍。做一做它每个章节后边的习题,你会在这本书上花很多很多时间,我也相信你因此会有很大的收获。从我这两年陆续读技术书的体验来看,还是推荐以经典为主,素人/网红/大Tittle名人写的书优秀内容较少,有发展粉丝经济的嫌疑。
- 《Hello 算法》: 如果你刷过剑指Offer的话,那你应该对它的作者比较眼熟。这是一本开源的算法入门电子书,其中所有的内容我全部看过,很用心也很有启发性,但是它还没有完结,不过因此的好处是你可以借此机会去仓库贡献内容。即使你读了上一本书,这本书也必读,而且我建议两本书一起读,先读这本书中的内容,再去《算法》中找相同的章节读,做一做后边的题目,这样能够降低一些《算法》晦涩的程度。
书籍链接: https://www.hello-algo.com - 《数据结构与算法之美》: 你说你完全读不进去大部头,那行啊,可以看看这本,国人写得书,比较好读,而且它还结合了一些算法应用的实例,不过一些延展的例子讲得不深,让人觉得浅尝辄止,不过用来入门完全够了,总体还是推荐的。
- 《算法图解》: 别读!别读!别读!太基础,所有的内容都能在上述书中找到且讲得更好。
LeetCode
- 《LabuLaDong的算法小抄》: 也是一本开源的免费电子书,不过我觉得这本书太 “繁重” 了,只关注它的第零章、动态规划和二叉树部分的讲解就好,其他部分建议直接在刷题的时候看高赞题解。大家不要去买这本实体书,电子版内容就很全了,实体书很像是“XXXXXX”。
书籍链接: https://labuladong.github.io/algo/di-ling-zh-bfe1b/ - LeetCode高频题: 刷题一定要分类刷,先刷链表、再刷二叉树、之后刷动态规划、回溯和递归类型的题,其他的数据结构类、双指针类等其他类放在后面。我自己做了一个刷题的仓库,是我刷过的一些经典题,它不只是简单的分类,在每个分类里我也做了一些细分和必要的思考点,每道题都链接好了LeetCode题目,能点过去直接刷,比较方便。我觉得对算法入门来说应该是完全够了,刷题过程重要的还是要做好总结,因为题量越来越大,不可能每一道题都刷到,有了自己对题的理解和思考才是最重要的。
LeetCode仓库: https://github.com/FangYuan33/LeetCode
祝大家学得开心
相关文章:
关于算法学习和刷题的建议
大家好,我是方圆。最近花时间学了学算法,应该算是我接触Java以来第一次真正的学习它,这篇帖子我会说一些我对算法学习的理解,当然这仅仅是浅浅的入算法的门,如果想深挖或者是有基础的人想提升自己,我觉得这…...
2023年“网络安全”赛项浙江省金华市选拔赛 任务书
2023年“网络安全”赛项浙江省金华市选拔赛 任务书 任务书 一、竞赛时间 共计3小时。 二、竞赛阶段 竞赛阶段 任务阶段 竞赛任务 竞赛时间 分值 第一阶段单兵模式系统渗透测试 任务一 Windows操作系统渗透测试 任务二 Linux操作系统渗透测试 任务三 网页渗透 任务四 Linux系统…...
http协议简介
http 1.简介 超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。1960年美国人Ted Nelson构思了一种通过计算机处…...
CSDN 第三十一期竞赛题解
第二次参加 总分77.5,主要是在最后一题数据有误,花费了巨量时间… 参加的另一次比赛最后一道题目也出现了一点问题,有点遗憾。 题解 T1:最优利润值 你在读的经营课程上,老师布置了一道作业。在一家公司的日常运营中&…...
EM_ASM系列宏定义(emscripten)
2.5 EM_ASM系列宏很多编译器支持在C/C代码直接嵌入汇编代码,Emscripten采用类似的方式,提供了一组以“EM_ASM”为前缀的宏,用于以内联的方式在C/C代码中直接嵌入JavaScript代码。2.5.1 EM_ASMEM_ASM使用很简单,只需要将欲执行的Ja…...
Batchnorm和Layernorm的区别
在深度学习训练中,我们经常会遇到这两个归一化操作,他们之间有什么区别呢?我们来简单介绍一下: BatchNorm: 在深度学习训练的时候我们的数据如果没有经过预处理,有可能会出现梯度消失或者梯度爆炸的情况&…...
高级前端面试题汇总
iframe 有那些优点和缺点? iframe 元素会创建包含另外一个文档的内联框架(即行内框架)。 优点: 用来加载速度较慢的内容(如广告)可以使脚本可以并行下载可以实现跨子域通信 缺点: iframe 会…...
HTML#5表单标签
一. 表单标签介绍表单: 在网页中主要负责数据采集功能,使用<form>标签定义表单表单项: 不同类型的input元素, 下拉列表, 文本域<form> 定义表单<input> 定义表单项,通过typr属性控制输入形式<label> 为表单项定义标注<select> 定义下拉列表<o…...
ONNX可视化与编辑工具
ONNX可视化与编辑工具netrononnx-modifier在模型部署的过程中,需要使用到ONNX模型,下面给大家推荐两个ONNX可视化与编辑工具,其中,netron仅支持模型的可视化,onnx-modifier支持ONNX的可视化与编辑。 netron Netron是…...
Verilog 学习第五节(串口接收部分)
小梅哥串口部分学习part2 串口通信接收原理串口通信接收程序设计与调试巧用位操作优化串口接收逻辑设计串口接收模块的项目应用案例串口通信接收原理 在采样的时候没有必要一直判断一个clk内全部都是高/低电平,如果采用直接对中间点进行判断的话,很有可能…...
AIX系统常见漏洞修复(exec、rlogin、rsh、ftp、telnet远端服务运行中)
漏洞:1.1 SSH 服务支持弱加密算法 1. 使用telnet 登录2.vi /etc/ssh/sshd_config 最后添加一下内容(去掉 arcfour、arcfour128、arcfour256 等弱加密算法) Ciphers aes128-ctr,aes192-ctr,aes256-ctr,aes128-cbc,3des-cbc,blowfish-cbc,cast…...
IEEE SLT 2022论文丨如何利用x-vectors提升语音鉴伪系统性能?
分享一篇IEEE SLT 2022收录的声纹识别方向的论文,《HOW TO BOOST ANTI-SPOOFING WITH X-VECTORS》由AuroraLab(极光实验室)发表。 来源丨AuroraLab AuroraLab源自清华大学电子工程系与新疆大学信息科学与工程学院,以说话人识别和…...
设计模式(十三)----结构型模式之桥接模式
1 概述 现在有一个需求,需要创建不同的图形,并且每个图形都有可能会有不同的颜色。我们可以利用继承的方式来设计类的关系: 我们可以发现有很多的类,假如我们再增加一个形状或再增加一种颜色,就需要创建更多的类。 试…...
倾向得分匹配案例分析
一、倾向得分匹配法说明 倾向得分匹配模型是由Rosenbaum和Rubin在1983年提出的,首次运用在生物医药领域,后来被广泛运用在药物治疗、计量研究、政策实施评价等领域。倾向得分匹配模型主要用来解决非处理因素(干扰因素)的偏差。 …...
基于SpringCloud的可靠消息最终一致性04:项目基础代码
上一节给出了项目需求和骨架代码,这一节来接着看基础代码。骨架代码和基础代码最主要的区别是:骨架代码都是数据库脚本、POM依赖文件、配置文件内容、运维脚本等,而基础代码则是和业务有关联,但并非关键代码的部分。 这些代码不用一个个地看,主要是看看结构就行。 图二十五…...
操作系统权限提升(十八)之Linux提权-内核提权
Linux 内核提权 Linux 内核提权原理 内核提权是利用Linux内核的漏洞进行提权的,内核漏洞进行提权一般包括三个环节: 1、对目标系统进行信息收集,获取到系统内核信息及版本信息; 2、根据内核版本获取其对应的漏洞以及EXP 3、使…...
华为OD机试真题Java实现【快递运输】真题+解题思路+代码(20222023
快递运输 题目 一辆运送快递的货车,运送的快递均放在大小不等的长方体快递盒中,为了能够装载更多的快递,同时不能让货车超载,需要计算最多能装多少个快递。 注:快递的体积不受限制,快递数最多1000个,货车载重最大50000。 🔥🔥🔥🔥🔥👉👉👉👉👉�…...
java面试题-JVM问题排查
1.常见的Linux定位问题的工具?常见的 Linux 定位问题的命令可以分为以下几类:系统状态命令:包括 top、uptime、vmstat、sar 等命令,用于查看系统整体的状态,如 CPU 使用率、内存使用率、磁盘 I/O 等。进程状态命令&…...
市场上有很多低代码开发平台,不懂编程的人可以用哪些?
市场上有很多低代码开发平台,不懂编程的人可以用哪些?这个问题一看就是外行问的啦,低代码平台主打的就是一个“全民开发”,而且现在很多低代码平台都发展为零代码了,不懂编程也完全可以使用! 所谓低代码开…...
Tina_Linux打包流程说明指南_new
OpenRemoved_Tina_Linux_打包流程_说明指南_new 1 概述 1.1 编写目的 介绍Allwinner 平台上打包流程。 1.2 适用范围 Allwinner 软件平台Tina v3.0 版本以上。 1.3 相关人员 适用Tina 平台的广大客户,想了解Tina 打包流程的开发人员。 2 固件打包简介 固件…...
JVM面试题
JVM 1.jvm的组成部分 类加载器:将javac编译的class文件加载到内存中 运行时数据区:将内存划分成若干个不同的区域。 执行引擎:负责解析命令,提交操作系统执行。 本地接口:融合不同的语言为java所用 2.运行时数据区 方法区&…...
@FeignClient注解
1.在启动类上开启Feign功能 不开会提示找不到所需要的bean Consider defining a bean of type in your configuration SpringBootApplication EnableFeignClients public class AuthApplication {public static void main(String[] args) {SpringApplication.run(AuthApplic…...
一文搞懂如何在 React 中使用 防抖(Debounce)和 节流(Throttle)
在前端的日常开发中,经常会使用到两个函数防抖(Debounce)和节流(Throttle),防抖函数可以有效控制在一段时间内只执行最后一次请求,例如搜索框输入时,只在输入完成后才进行请求接口。…...
Airbyte API
Airbyte API涵盖了Airbyte功能的方方面面,主要分类:Source_definition:来源定义,实现了来源的增删改查功能。Destination_definition:目标定义,实现了目标的增删改查功能。Workspace:工作区管理…...
vue项目使用Electron开发桌面应用
添加npm配置避免安装Electron错误 请确保您的 node 版本大于等于 18. cmd运行: npm config edit 该命令会打开npm的配置文件,请在空白处添加: electron_builder_binaries_mirrorhttps://npmmirror.com/mirrors/electron-builder-binaries/ e…...
std::chrono笔记
文章目录1. radio原型作用示例2. duration原型:作用示例3. time_point原型作用示例4. clockssystem_clock示例steady_clock示例high_resolution_clock先说感觉,这个库真恶心,刚接触感觉跟shi一样,特别是那个命名空间,太…...
接收arp请求并发送回应的实例
本文简单介绍了arp协议,用一个实例查看收到的ARP请求,并对该请求发出ARP回应,实例有完整的源代码,使用C语言在Linux下实现,代码中有详细的注释。 1. ARP协议 ARP(Address Resolution Protocol),地址解析协议;在局域网上通过IP地址获取物理地址MAC的协议,该协议工作在数…...
【高性能计算】TVM使用TE手动优化矩阵乘法算法解析与代码解读
引言 注:本文主要介绍、解释TVM的矩阵优化思想、代码,需要配合代码注释一起阅读。 矩阵乘法是计算密集型运算。为了获得良好的 CPU 性能,有两个重要的优化措施: 提高内存访问的高速缓存命中率。复杂的数值计算和热点内存&#x…...
消息中间件的概念
中间件(middleware)是基础软件的一大类,属于可复用的软件范畴。中间件在操作系统软件,网络和数据库之上,应用软件之下,总的作用是为处于自己上层的应用软件提供运行于开发的环境,帮助用户灵活、高效的开发和集成复杂的…...
窃密恶意软件Raccoon最新样本Stealer v2分析
Raccoon 是一个恶意软件家族,2019 年来一直在地下犯罪论坛中以恶意软件即服务的身份进行售卖。2022 年 7 月,该恶意软件家族发布了 C 语言编写的新版本 Raccoon Stealer v2,打破了以往使用 C 开发的传统。 Raccoon 是一个信息窃密恶意软件&a…...
做摄影网站/网站建设公司开发
示例代码 public class TestMain implements Runnable {//格式化static SimpleDateFormat sim new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");Overridepublic void run() {//让线程Thread-0执行同步方法1if ("Thread-0".equals(Thread.currentThread().ge…...
公司网站建设多少钱/原画培训机构哪里好
栈:后进先出;最后一个放入堆栈中的物体总是被最先拿出来。使用链表来模拟栈的入栈出栈操作。1.节点类代码public class Entry {private T value;private Entry next;public Entry() {this(null);}public Entry(T value) {this.valuevalue;this.nextnull;…...
建团购网站/百度域名注册查询
最近在做项目时用到了PDO操作mysql数据库,于是自己写了一个类文件,命名为mysql_class.php文件代码如下: <?php class mysql{//常量声明const DSN "mysql:host[数据库地址];dbname[数据库名];charsetutf8";//数据库地址与数据库…...
专业优化网站排名/2022年最火的电商平台
原文来源:Salesforce Researc 作者:JiataoGu、 James Bradbury 「雷克世界」编译:嗯~阿童木呀、多啦A亮 Salesforce研究院去年了成立研究院,之后又发布其人工智能服务Einstein AI。该研究院在自然语言处理,尤其是翻译方…...
外贸建立网站怎么做/有没有推广app的平台
首先我们看下面视图: 这种效果大家都不陌生,网上好多都说是仿人人网的,估计人家牛逼出来的早吧,我也参考了一一些例子,实现起来有三种方法,我下面简单介绍下: 方法一:其实就是对Gest…...
html网站开发基础/百度竞价登录
作者原文地址:http://www.w3cplus.com/css3/transform-basic-property.html 在《CSS3 Transform——transform-origin》一文中主要介绍了CSS3 Transform属性中的transform-origin属性的使用,其实在transform属性中,transform-origin属性仅是其…...