算法刷题路线总结与相关资料分享

news2024/12/21 16:37:10

算法刷题路线总结与相关资料分享

  • 前言
  • 一、算法刷题路线总结
  • 二、算法题刷题步骤
  • 三、基础数据结构与算法知识
    • 1、时间复杂度
    • 2、空间复杂度
    • 3、线性表
    • 4、栈与队列
    • 5、树
  • 四、算法学习相关资料推荐
    • 1.数据结构与算法基础
    • 2.专项刷题路线资料
    • 3.算法课程视频资料
  • 后记


前言

本文为算法刷题路线总结与相关资料分享,所有内容为参考网上多方资源进行总结而得,本人自己也在持续学习中~ ,Java全栈学习路线可参考:【Java全栈学习路线】最全的Java学习路线及知识清单,Java自学方向指引,内含最全Java全栈学习技术清单~

一、算法刷题路线总结

经过对网上多方经验的参考,总结出自己的算法刷题路线如下:
(1)首先,复习数据结构与算法基础知识,形成完整的算法知识体系,最基本的数据结构,例如链表,队列,栈,二叉树等至少要先熟练掌握;
(2)接着刷LeetCode前100题,前100题是最为常见的题目,据说刷算法题0-100题是第一道坎,100-300题是第二道坎,那么度过第一道坎就可以让我们对算法题目有基本的认识,慢慢找到做题的感觉和思路,并拥有一定的做题能力,可以按照链表/二叉树/递归等这些标签来刷;
(3)然后就是算法能力提升阶段,要根据专题进行专项训练,掌握不同的解决问题的方法,并能够针对具体类别的问题产生相应的解题思路,可以参考下边专项刷题路线资料分享;
(4)最后就是进一步提高阶段,可以采用乱序刷题的方式,可以刷各种面经和高频题,推荐书籍《剑指offer》,这一阶段重在锻炼在面对不同问题的时候,能够选择最为合适的数据结构和算法,进一步加深对于算法的理解,同时拓展常用的算法思想,建立自己的理解。同时学习各种各样的解题技巧和思路,也要学习相关的数学知识。

二、算法题刷题步骤

互联网算法笔试题型介绍:

  • (1)基本数据结构的考察:这类题我是比较简单的,主要考场基本数据结构的操作,例如二叉树的层序遍历,链表的逆序等,当然,它不会直接告诉你,让你来逆序或者遍历。
  • (2)某种算法思想的掌握:这类题掌握了某种算法思想,就会比较容易,如果不懂,那就凉凉了。例如动态规划、回溯、枚举、深度/广度、贪心、二分等。其中,动态规划考的挺多,然后就是回溯+深度/广度。
  • (3)边界条件的考察:这类型的题,估计一看就有思路,知道该怎么做,但是,它的边界条件特别多,需要分很多种情况来讨论,特别容易出错,有时候会让人陷进去,越做越复杂,这类题主要考查思维严谨程度。
  • (4)找规律、数学公式:这类型的题,主要是根据数据之间的一些关系,来找一些规律,进而推出他们的通用公式,就像我们高中时,找数列的同项一样。

算法题刷题分三大步骤:

  • (1)分析题目属于哪一类题目,大概用到什么数据结构算法,是数组、链表、图、树?还是用递归动态规划这些方法。常见的算法题目一般只涉及到这几个方面。
  • (2)验证分析阶段的思路。注意常见错误:变量名写错,边界条件考虑不周。如果调试阶段超过写代码的30%时间,说明思考过程,方案设计很有问题。先反思分析设计方案除了什么错误,思考的不够系统吗?不要一边写,一边改方案,这样效率太低,而且你会逐渐适应低效率的节奏,这个负面影响太大。
  • (3)作总结,总结很重要。如果没做出来,反思什么阶段犯了错误。如果做出来了,思考解题的关键点是什么,总结题目特点,一定要总结这个题目属于哪一种类型,这个题目在这个类型中特点是什么,和其他这个类型的其他题目区别在哪里。只有经过总结,做过的题目才会真正进入你解题思维的一部分,解题能力的一部分。

刷题时的注意点:
(1)一眼就懂思路的题有必要做吗?答案是,有必要做。千万不要眼高手低,看着简单,做起来不一定简单,AC 之后,还要去讨论区看看大佬们是怎么做的,因为有些人的代码,写的很简洁,看着就很舒服,可以多学一学。
(2)尽量最优解。对于很多题,如果不看时间复杂度和空间复杂度,单单只是 AC,那还是很容易的,但是一提交,可能只打败了百分之几的人,显然我们不能只满足于这种代码。当做一道题时,一开始可以先暴力做,但后面还得想想该如何优化,想不出也没事,可以讨论区找空间/时间复杂度更低的代码,或者直接搜索引擎搜索,一般都能搜到别人的代码。之后跟着别人的代码,自己再实现一波,尽可能把最优解的代码实现起来。当你入门之后,更多的是要总结方法,寻找高效率的代码。

三、基础数据结构与算法知识

在这里把基础数据结构与算法知识形成列表列举出来,具体学习可以参考下边的算法学习相关资料~

1、时间复杂度

2、空间复杂度

一般最先接触的就是时间复杂度和空间复杂度的学习了,这两个概念以及如何计算,是必须学的,也是必须最先学的,主要有最大复杂度、平均复杂度等。

3、线性表

  • 列表(必学)
  • 链表(必学)
  • 跳跃表(知道原理,应用,最后自己实现一遍)
  • 并查集(建议结合刷题学习)

链表、列表必学,重点是链表。

4、栈与队列

  • 栈(必学)
  • 队列(必学)
  • 优先队列、堆(必学)
  • 多级反馈队列(原理与应用)

5、树

  • 二叉树:各种遍历(递归与非递归)(必学)
  • 哈夫曼树与编码(原理与应用)
  • AVL树(必学)
  • B 树与 B+ 树(原理与应用)
  • 前缀树(原理与应用)
  • 红黑树(原理与应用)
  • 线段树(原理与应用)

树相关是知识比较多,建议看书,可以看《算法第四版》,不过刷题前对于树的知识也不需要准备太多,先把最基本的二叉树学了就可以。

四、算法学习相关资料推荐

1.数据结构与算法基础

相关书籍有《算法导论》、《算法第四版》、《算法竞赛入门经典》等,如果觉得阅读书籍较为枯燥,效率较低,建议在复习数据结构与算法基础知识可以阅读LeetCode中的Leetbook,Leetbook 是 Leetcode官方提供的课程,它的好处是把算法归类为各个章节,而且大部分章节都是免费的。
在这里插入图片描述
在这里插入图片描述

2.专项刷题路线资料

推荐网站代码随想录: https://www.programmercarl.com/
《代码随想录》是Carl,一位哈工大师兄精心整理,帮助需要刷算法的同学少走弯路!
一个正确的刷题顺序对算法学习是非常重要的!该站大概按照如下专题来刷:数组-> 链表-> 哈希表->字符串->栈与队列->树->回溯->贪心->动态规划->图论->高级数据结构,都是先从简单刷起,做了几个类型题目之后,再慢慢做中等题目、困难题目。
在这里插入图片描述

3.算法课程视频资料

对于算法相关的免费课程推荐B站最火的左程云的算法课程:算法大神左神(左程云)耗时100天打造算法与数据结构基础到高级全家桶教程) ,左神专注于算法指导,因此他的课程质量还是比较高的。
在这里插入图片描述
另外,左程云编写的算法书籍《程序员代码面试指南》也堪称“神书”!书中对 IT 名企代码面试各类题目的最优解进行了总结,并提供了相关代码实现,选取将近 300 道真实出现过的经典代码面试题,"刷”完这书,就是"题王”!

在这里插入图片描述

后记

后续会持续对自己算法刷题过程中的解题思路进行总结与分享~
Java全栈学习路线可参考:【Java全栈学习路线】最全的Java学习路线及知识清单,Java自学方向指引,内含最全Java全栈学习技术清单~

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

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

相关文章

双十一数码产品哪些值得买?双十一好物产品分享

双十一必然是数码产品最值得买的,因为这类产品的优惠力度往往是最大的,所以每年的双十一都是升级数码设备的好时机,今天为大家带来的是便是个人推荐的双十一数码好物。好了,废话不再多说,我们开车吧。 一、不伤耳的骨…

postman 实用教程(含带 token 访问需登录权限的接口)

下载安装 Postman 访问官网下载安装 Postman https://www.postman.com/downloads/?utm_sourcepostman-home 新建文档 右键菜单可以重命名 新建接口 选择接口类型输入接口若传入参数格式为 json ,则选择 Body 中的 raw 和 JSON输入传入的参数(json格式&a…

计算机网络--数据链路层

今天来讲网络协议栈的最后一层,数据链路层(物理层我们不考虑了),我们之前学到,TCP协议提供了数据传输的可靠性,IP层决定数据报从哪到哪,那么数据报是如何从一个结点到下一个结点呢?得到相应如何返回呢&…

(02)Cartographer源码无死角解析-(09) gflags与glog简介、及其main函数讲解

本人讲解关于slam一系列文章汇总链接:史上最全slam从零开始,针对于本栏目讲解(02)Cartographer源码无死角解析-接如下: (02)Cartographer源码无死角解析- (00)目录_最新无死角讲解:https://blog.csdn.net/weixin_43013761/article/details/127350885 文…

软件工程结构化设计

目录 结构化分析与结构化设计的关系: 体系结构设计概念: 图形工具: 层次图:调用关系​编辑 HIPO图:层次图IPO图 软件结构图: 软件设计原则: 模块化: 模块划分注意事项&#xf…

巴什博弈——范围拿物品问题

巴什博弈 巴什博弈(Bash game) 是一个双人博弈:有一堆总数为n的物品,2名玩家轮流从中拿取物品。每次至少拿1件,至多拿m件,不能不拿,最终将物品拿完者获胜。 巴什博弈除了两人轮流按一定数量拿物…

【黄啊码】MySQL入门—14、细说数据库的MVCC机制

大家好,我是黄啊码。上一篇文章中,我们讲到了锁的划分,以及乐观锁和悲观锁的思想。今天我们就来看下 MVCC,它就是采用乐观锁思想的一种方式。那么它到底有什么用呢? 我们知道事务有 4 个隔离级别,以及可能…

共谋韬略、共巢未来,电巢与韬略“战略合作签约仪式”圆满举办!

前言 2022年10月27日下午,电巢科技与韬略科技齐聚深圳南山,共同举办了隆重的战略合作签约仪式,双方就整合核心资源、共同打造高质量数字化内容等战略方针达成了一致,携手开启合作新篇章。 电巢科技和韬略科技基于相契合的发展战略…

Numpy基础教程

1 Numpy 对象2 Numpy创建numpy.array 构造器来创建numpy.emptynumpy.zerosnumpy.onesnumpy.arangeNumpy索引3 Numpy常用操作numpy.reshapenumpy.reshape(arr,newshape,order C)numpy.transposenumpy.expand_dimsnumpy.squeezeNumpy功能十分强大的python扩展库,数学…

基于Java+Springboot+Vue+elememt美食论坛平台设计实现

博主介绍:✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取联系🍅精彩专栏推荐订阅👇&#x1f…

07-树(Tree)结构分析

文章目录树(Tree)结构分析什么是树?树中的相关名词如何理解?什么是二叉树?什么是二叉搜索树?什么是AVL树?什么是2-3树?什么是红黑树?总结(Summary)树(Tree)结构分析 什么…

【飞桨PaddleSpeech语音技术课程】— 语音识别-流式服务

FastAPI websocket 流式语音识别服务 0. 背景 流式语音识别(Streaming ASR)或者在线语音识别(Online ASR) 是随着输入语音的数据不断增加,实时给出语音识别的文本结果。与之相对的是非实时或者离线语音识别,是传入完整的音频数据,一次给出整…

ppocrlabel简单教学

前言 给我们小白成员的快速上手ppocrlabel的指南 1. ppocr环境配置 建议是先创建一个虚拟环境 【直接参考】:https://blog.csdn.net/weixin_42708301/article/details/119864744 2. ppocrlabel环境安装 【参考文档】PaddleOCR-release-2.6\PPOCRLabel\README_c…

将STM32 内部Flash虚拟成优盘,进行IAP升级

书接上回,上篇文章已经成功的将 STM32 内部FLASH虚拟成优盘进行文件存储了。 【将 STM32 内部Flash虚拟成优盘】https://blog.csdn.net/qq_44810226/article/details/127508789 然后我们开始固件升级流程: 从上图可以看出,固件存储的位置是不…

Python-代码封装思想

继上文所将讲的pythonrequestsUnittest框架,本文将继续分享python代码的进一步封装思想,来提高代码的整体运行效率及整洁性,本文以接口测试框架为例进行讲解。 关于Unittest单元测试框架的具体使用方法链接链接(点击跳转&#xf…

MMEngine理解

MMEngine理解1 简介1.1 架构1.2 模块介绍1.2.1 核心模块与相关组件1.2.1 公共基础模块2 上手示例2.1 构建模型2.2 构建数据集和数据加载器2.3 构建评测指标2.4 构建执行器并执行任务3. 基础模块3.1 注册器(Registry)3.1.1 什么是注册器3.1.2 使用流程3.1…

OSPF路由协议(二)

作者介绍: ⭐️作者:小刘在C站 ❄️每天分享课堂笔记,一起努力,共赴美好人生! ☁️夕阳下,是最美的绽放。 目录 一.Router id 二.DR,BDR 三.DR BDR 选举过程 四.ospf 度量值 cost 代价 五.ospf 的数据…

部署vue项目到阿里云服务器

一般前端工程师只会使用npm run serve 在开发环境下验证,那么如何把npm run build 打出的包部署到服务器上进行上线呢?这篇文章就详细阐述这一流程。 1. 购买或试用阿里云服务器 作为新用户可以试用一个月阿里云服务器,阿里云官方网址如下&a…

【数据结构与算法分析】0基础带你学数据结构与算法分析07--二叉树

在学习上一章后,我们对树加以限制,如果树的度为 2,那么就称这颗树为 二叉树 (binary tree)。 二叉树的性质 在一棵二叉树上,有一些重要的性质: 第 i 层 (i∈N) 上最多有 2^(i−1) 个结点层次为 k(k∈N) 的树最多有 …

进程地址空间

目录 程序地址空间 感知虚拟地址空间的存在 进程地址空间 分页 & 虚拟地址空间 Linux2.6内核进程调度队列 程序地址空间 我们在学习C语言的时候了解过程序地址空间的分布: 需要注意的是:程序地址空间不是内存。我们在linux操作系统中通过代码来…