刷题的学习和思路
今天聊一下刷题,很多小伙伴非CS专业毕业后花了大量时间刷题但是没有得到相等的回报,我本人是3个月从差基础,一路刷题拿到offer的,这里我想发表一下我的个人看法,还有我学习的思路和心得。
具体算法和进阶数据格式的实现方式,我会尽量每天更新一两个算法和数据结构,帮助大家学习,同时也巩固自己的基本功。这篇文章会不断更新,有哪里错了或者少了求大家提出来,互相学习,一起成长~!
语言选取
这篇文章主要是以OOP Language为主。
刷题的语言什么都可以,我觉得没有什么语言适合和不适合刷题。如果是有过写代码经验,使用自己最擅长的语言,反复学习精益求精就行,没必要特意的换语言。(所以小老弟请专一 )
如果是0基础,什么语言都不会。这里建议从Java(Java国内外市场都好),或者前端语言JavaScript(非常优秀的前端语言,也可做后端,国外目前很流行)开始学起。python不管从市场角度和科研高度,都不太适合作为0基础的第一语言。
我相信在一个语言登峰造极,在其它类似的语言边查边学成长速度是很快的。比如说OOP类型的。
数据形式
刷题当然要先了解数据形式了,数据形式可以是一个解决问题的思路,也可以简化问题的一种方法。
下面我总结了几个常用的数据形式。
基础数据格式
最基础的数据形式
- string, int, bool, char, long, byte, short
- Array (1d, 2d… nd)
以上都是最基础的数据形式,一定要牢记。
每个数据形式需要了解:
- 空间占用
- 存的具体是什么
- 存在的意义是什么
- 对比类似的数据格式,优劣势是什么
进阶数据格式
接下来是进阶数据格式
点开超链接就可以看到具体的介绍和学习啦!(还在持续更新)
- List
- Queue
- Stack
- Tree
- Tries
- Heaps
- Map
- LinkedList
- HashTable
- HashMap
每个进阶数据形式需要了解:
- 总体的空间,时间成长复杂度。
- CRUD每次的时空间复杂度。(Add, Read, Update, Delete)
- 存的具体是什么,具体都可存什么?
- 存在的意义是什么
- 对比类似的数据格式,优劣势是什么
- 可以自己实现核心功能(自己去实现一个,其实很简单,强烈建议学完自己写一遍,用不了多久的)
很多人看见进阶算法,就很慌。觉得是个新的东西。
我个人觉得,这些无非就是把基础数据格式,用排列组合换一种方式呈现出来罢了,放平心态,记住要点,原理,多加练习。
高阶数据格式
接下来是进阶数据格式
- UnionFind (也是算法,同是数据格式)
- 还有很多,以后也会越来越多,
算法
- Greedy
- Recursion
- Searching
- Sorting
- sliding window
- DP
- DIJK
- 弗洛伊德
- A*
- Kadane
- Topological Sort
- Knuth-Morris-Pratt (KMP)
- UnionFind (也是算法,同是数据格式)
解题思路
后面更新哈哈
题型总结
后面更新哈哈
String 字符串
字符串是最常考的,也是从职场中最常见的问题。
Palindrom 回文字符串
Subset
Tree 树
树的基本搜索
- Inorder
- Pre order
- Post order
树的定义
二叉树
完美二叉树
BST
Linkedlist Node 链表
链表
面试思路
后面更新哈哈