Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Latest commit

 

History

History
History
 
 

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

README.md

Outline
date description
2022-05-03
数据结构与算法的重要性不言而喻,学好数据结构与算法可以帮助你撬开互联网大厂的大门。

数据结构与算法阅读指南

什么是数据结构与算法?

🔎学习数据结构与算法之前,我们要理解什么是数据结构与算法。

数据结构,就是一组数据的存储结构。

算法,就是操作数据的一组方法。

数据结构是为算法服务的,算法要作用在特定的数据结构之上。

基于上面的说法,我们基本可以说:程序 = 数据结构 + 算法

为什么要学习数据结构与算法?

至于为什么要学习数据结构与算法,不同的人有不同的看法。

在校学生:学习数据结构与算法,夯实基础以后可以参加ACM举办的程序设计大赛,扎实的数据结构与算法功底可以帮助在校学生拿到比赛名次,这对于未来校招都很重要。很多大公司,比如 BAT、Google、Facebook,面试的时候都喜欢考算法、让人现场写代码。很多学生虽然技术(框架运用)不错,但每次去面试都会“跪”在算法上,很是可惜。那你有没有想过,为什么这些大公司都喜欢考算法呢?校招的时候,参加面试的学生通常没有实际项目经验,公司只能考察他们的基础知识是否牢固,越是厉害的公司,越是注重考察数据结构与算法这类基础知识。相比短期能力,他们更看中学生们的长期潜力。

普通程序员:学习数据结构和算法,可以帮助普通程序员提高写代码的能力,业界有一个共识:数据结构与算法是程序员的基本功,也是内功,更是编程的基础。很多普通程序员在面试心仪公司的时候,面试官都会考察程序员数据结构与算法,他们也往往在平时忽略了数据结构与算法,当面对算法题的时候,常常束手无策,从而与心仪公司的Offer失之交臂。

高级程序员:高级程序员在设计系统的时候,例如存储系统,该用何种数据结构来构建索引引擎,是使用Hash还是二叉树还是B+树,这往往都是数据结构的应用,如何来检索索引,这往往是算法的应用,深厚的数据结构与算法功底,可以帮助高级程序员设计出高效的检索引擎,好的算法、合适的数据结构,搭配起来可以实现O(1)的时间复杂度,这会比O(n)甚至O(n^2)的算法性能更高!

如何学习本专栏?

  • 掌握一门编程语言

很多人说,数据结构与算法和编程语言无关,学习数据结构和算法主要是学习它的编程思想。对于这种说法,笔者对后半句比较认同,但是前半句,笔者则抱有不同的意见。数据结构与算法本身确实是与语言无关,任何编程语言对数据结构都有相应的实现,但是如果读者对任何一门编程语言都不熟悉,那学习数据结构与算法也将收益甚小。拿Java来说,如果读者不清楚HashMap的自动扩容机制,那么在编码的时候,可能会忘记在创建HashMap容器的时候给予初始容量,那么后期在存储数据的时候,就存在扩容现象,这样就增加了整体耗时,程序性能降低。如果一开始就知道存储数据的数量,那么在初始化HashMap的时候就可以直接赋予合适的初始容量,这样性能就不会有损耗。感兴趣的读者可以关注笔者的另外两篇文章:《深入理解JDK7 HashMap》、《深入理解JDK8 HashMap

  • 采用『理论 + 实践』的方式

本专栏采用的基本方式是『理论 + 实践』,每一章第一节都是对当前的数据结构与算法的理论知识进行讲解,后面的小节都是对与本小节相关的leetcode上的经典算法练习题进行讲解和剖析。相信读者在『理论 + 实践』相结合的学习方式下,肯定会有所收获。

章节安排

基本章节安排如下,后续将各个章节的基本小节也列出,方便大家检索:tada:

第一章 数组

第二章 链表

第三章 哈希表

第四章 字符串

第五章 栈与队列

第六章 二叉树

第七章 回溯算法

第八章 贪心算法

第九章 动态规划

Morty Proxy This is a proxified and sanitized view of the page, visit original site.