之前我几乎每天都在LeetCode 上刷算法题,但是在写公众号之后渐渐就没练了,现在我打算重拾起来。
今天分享一下之前看到的一个算法网站吧,我觉得很不错。
https://www.programiz.com/dsa/algorithm
dsa 就是 Data Structures and Algorithms,数据结构与算法。
来看下目录,安排的明明白白的。
涵盖了如下内容:
常见数据结构,包括:栈、队列、循环队列、优先队列、双端队列、链表、堆、哈希表等等。
相关的树形结构,包括:二叉树、平衡二叉树、AVL树、B树、B+树、红黑树等等。
图相关,包括:生成树、最小生成树、邻接矩阵实现、邻接表实现等。
排序搜索算法,包括:冒泡、选择、插入、合并、快排、计数、基数、桶排、堆排、希尔、线性搜索、二分等。
贪心算法,包括:最大流量算法、Dijkstra、Kruskal、Prim、Huffman等。
动态规划,包括:Floyd、最长公共子序列等。
回溯、字符串匹配算法。
上面这些就囊括了我们学数据结构与算法的所有,掌握了上面这些,面试洒洒水一样,随便搞。
然后再看看这个网站的内容,啧啧我只能说,美。
拿红黑树举个例子吧。
从特性到例子图,到每个节点需要的属性都列的很清楚,而且图片很美观,字体也很漂亮。
再看个左旋,每一步都用文字和图来展示。
我只能说太巴适了,包括插入、删除反正红黑树各种情况都用文字和图一步一步的解析,生怕你看不懂。
最后还有代码实现!包含了 Python、Java、C、C++ 四种语言。
还记得手写红黑树这个面试题嘛?人家给你写出来了,来参考参考。
我看了下实现需要近 400 行代码,啧啧顶不住。
对了,这个网站还有个好处,就是能让我们边学算法,边学英语,一箭双雕,一石二鸟,美滋滋。
当然这上面只能算地基,学完这个并不能让你面试披荆斩棘。
地基打牢了之后就需要往上面建,也就是需要多加练习,多上 LeetCode 刷刷题,形成肌肉记忆,这样在面试这种紧张的场景才能有很好的发挥。