文章目录
关于我的仓库
- 这篇文章是我为面试准备的学习总结中的一篇
- 我将准备面试中找到的所有学习资料,写的Demo,写的博客都放在了这个仓库里iOS-Engineer-Interview
- 欢迎star??
- 其中的博客在简书,优快云都有发布
- 博客中提到的相关的代码Demo可以在仓库里相应的文件夹里找到
前言
- 该系列为学习《数据结构与算法之美》的系列学习笔记
- 总结规律为一周一更,内容包括其中的重要知识带你,以及课后题的解答
- 算法的学习学与刷题并进,希望能真正养成解算法题的思维
- LeetCode刷题仓库:LeetCode-All-In
- 多说无益,你应该开始打代码了
01讲为什么要学习数据结构和算法
- 想要通关大厂面试,千万别让数据结构和算法拖了后腿
- 我们学任何知识都是为了“用”的,是为了解决实际工作问题的
- 业务开发工程师,你真的愿意做一辈子CRUD boy吗?【crud是指在做计算处理时的增加(Create)、读取查询(Retrieve)、更新(Update)和删除(Delete)几个单词的首字母简写。crud主要被用在描述软件系统中数据库或者持久层的基本操作功能。】
- 不需要自己实现,并不代表什么都不需要了解。
- 在基础框架中,一般都揉和了很多基础数据结构和算法的设计思想。
- 掌握数据结构和算法,不管对于阅读框架源码,还是理解其背后的设计思想,都是非常有用的。
- 基础架构研发工程师,写出达到开源水平的框架才是你的目标!
- 对编程还有追求?不想被行业淘汰?那就不要只会写凑合能用的代码!
- 掌握了数据结构与算法,你看待问题的深度,解决问题的角度就会完全不一样。
课后题:你为什么要学习数据结构和算法呢?在过去的软件开发中,数据结构和算法在哪些地方帮到了你?
- 在最开始对算法有概念是在刚大一的时候,当时学校没开C语言,都是自己在那里做算法题,对于算法也是在那个时候开始用些许认识的,当时就会觉得很奇妙
- 后来参加了蓝桥杯,ACM校赛,开始意识到自己和高手之间有多深的差距,进入实验室学习iOS开发后,算法也是基本放下,也是明显感到和后台舍友之间的差距越来越大
- 目前数据结构和算法,算法课都已经上完,对于各种算法好像懂点,看到题也能像孔乙己一样支支吾吾说个DP出来,可一到上手敲的时候,还是gg
- 即将参加面试,算法作为重要的一环,我不希望会拖我后腿,甚至希望能是个加分项,为此,我会✊到底
- 过去的软件开发,在iOS开发阶段,调的都是Apple的API,没怎么用到算法与数据结构知识,但最近阅读RunTime源码的时候,由于Apple用了很多Hash的知识,没有这方面的知识很容易对源码产生困惑
02讲如何抓住重点,系统高效地学习数据结构与算法
- 数据结构是为算法服务的,算法要作用在特定的数据结构之上。
- 复杂度分析对于学习算法有很大的用处,✊学好
-
十个数据结构:数组、链表、栈、队列、散列表、二叉树、堆、跳表、图、Trie树
-
十个算法:递归、排序、二分查找、搜索、哈希算法、贪心算法、分治算法、回溯算法、动态规划、字符串匹配算法
-
不要为了学习而学习,而是要学习它的“来历”“自身的特点”“适合解决的问题”以及“实际的应用场景”。
课后题:请思考一下你自己学习这个专栏的方法,你在之前学习数据结构和算法的过程中,遇到过什么样的困难或者疑惑吗?
- 这篇文章就是方法的一部分,在每一讲学完以后都会写成这样一块的总结,另外每天在LeetCode两道题
- 困难与疑惑真的是在于总感觉代码写不出来,想想挺对,一写就错