DSt:数据结构的最强学习路线之数据结构知识讲解与刷题平台、刷题集合、问题为导向的十大类刷题算法(数组和字符串、栈和队列、二叉树、堆实现、图、哈希表、排序和搜索、动态规划/回溯法/递归/贪心/分治)总结
文章来源地址https://uudwc.com/A/Ge5N
文章来源:https://uudwc.com/A/Ge5N
目录
数据结构的最强学习路线之问题为导向的十大类刷题算法总结
一、学习相关的讲解与刷题平台
1.1、数据结构+算法可视化
1.2、常见的刷题平台及其链接
国外平台
国内平台
二、刷题集合
DayDayUp之Job:牛客网—算法工程师—剑指offer之66道在线编程(解决思路及其代码)——1~20
DayDayUp之Job:LeetCode—算法工程师—面试必考精华版75 题覆盖全量考点之LeetCode75(解决思路及其代码)
三、常见的十大类考试题型
1、数组Arrays和字符串Strings
2、链表(Linked List)
3、栈和队列(Stacks and Queues)
4、树和二叉树(Trees and Binary Trees)
堆的实现、堆排序、
5、图(Graph)
6、哈希表(Hash Table)
7、排序和搜索(Sorting and Searching)
8、动态规划(Dynamic Programming)
9、回溯法(Backtracking)
10、递归
11、贪心算法
12、分治算法
数据结构的最强学习路线之问题为导向的十大类刷题算法总结
一、学习相关的讲解与刷题平台
1.1、数据结构+算法可视化
USFCA |
美国旧金山大学 Data Structure Visualization |
Backtracking - Hamiltonean Cycles |
|
VisuAlgo |
数据结构和算法动态可视化 (Chinese) - VisuAlgo |
数据结构复杂度 Big-O Algorithm Complexity Cheat Sheet (Know Thy Complexities!) @ericdrowell |
1.2、常见的刷题平台及其链接
国外平台
平台 |
简介 |
地址 |
LeetCode |
LeetCode是一个在线的技术面试准备平台,它提供了各种算法和数据结构的编程题目,供开发者练习和提高他们的编程技能。LeetCode平台上的题目主要涵盖了各种编程语言和技术领域,包括但不限于算法、数据结构、数据库、系统设计和面试题等。 2011年,LeetCode起源于美国硅谷。 2015年,转型为互联网技术人才成长平台。 2017年,张云浩加入,在其努力下,LeetCode 当年底全球用户就已破百万。 2018年2月,力扣正式进入中国,中文平台于同月测试上线。 |
LeetCode - The World's Leading Online Programming Learning Platform |
HackerRank |
HackerRank提供了各种编程题目和算法挑战,适合不同难度和领域的开发者。它还提供了竞赛和实时编程环境,可以测试和评估编程技能。 |
HackerRank - Online Coding Tests and Technical Interviews |
CodeSignal |
CodeSignal是一个在线编程和技能评估平台,提供了大量的算法题目和编程挑战。它还提供了专门用于技能评估和面试准备的功能。 |
CodeSignal - Technical Interview & Assessment Solution |
Project Euler |
Project Euler是一个以数学和计算机科学问题为基础的刷题平台。它提供了一系列具有挑战性的问题,旨在锻炼解决问题和编程技巧。 |
https://projecteuler.net |
Topcoder |
Topcoder是一个面向开发者的竞赛平台,提供了各种算法竞赛和编程挑战。它还有一个题库,包含了许多经典的算法和数据结构问题。 |
Top Website Designers, Developers, Freelancers for Your Next Project | Topcoder |
国内平台
平台 |
简介 |
地址 |
牛客网 |
牛客网成立于 2014年9月,牛客网,是一个集笔面试系统、题库、课程教育、社群交流、招聘内推于一体的招聘类网站。 |
牛客网 - 找工作神器|笔试题库|面试经验|实习招聘内推,求职就业一站解决_牛客网 |
Lintcode |
lintcode炼码是一个leetcode中文版刷题平台,能够让我们通过在线实操的方式,提升编程能力。九章算法(杭州)科技有限公司。 |
LintCode 炼码 |
二、刷题集合
DayDayUp之Job:牛客网—算法工程师—剑指offer之66道在线编程(解决思路及其代码)——1~20
https://yunyaniu.blog.csdn.net/article/details/100822646
DayDayUp之Job:LeetCode—算法工程师—面试必考精华版75 题覆盖全量考点之LeetCode75(解决思路及其代码)
https://yunyaniu.blog.csdn.net/article/details/130716205
三、常见的十大类考试题型
涉及到数组和链表的遍历、插入、删除等操作。典型例题有两数之和、删除链表的倒数第N个节点等。
基本 |
数组、字符串、排序、矩阵、模拟、枚举、字符串匹配、桶排序、计数排序、基数排序 |
算法 |
动态规划、深度优先搜索、贪心、广度优先搜索、二分查找、回溯、递归、分治、记忆化搜索、归并排序、快速选择 |
基础数据结构 |
哈希表、树、二叉树、栈、堆(优先队列)、图、链表、有序集合、二叉搜索树、单调栈、队列、拓扑排序、最短路、单调队列 |
高级数据结构 |
并查集、字典树、线段树、树状数组、后缀数组 |
技巧 |
双指针、位运算、前缀和、计数、滑动窗口、状态压缩、哈希函数、滚动哈希、扫描线 |
数学 |
数学、几何、数论博弈、组合数学、随机化、概率与统计、水塘抽样、拒绝采样 |
1、数组Arrays和字符串Strings
包括数组操作、字符串处理、子数组/子串问题等。
数组操作(插入、删除、查找等)
字符串操作(查找、替换、翻转等)
子数组问题(最大子数组和、连续子数组等)
涉及到字符串的匹配、替换、删除等操作。典型例题有最长公共前缀、正则表达式匹配等。
如回文串、字符串相乘等。
数组操作 |
|
LeetCode54 螺旋矩阵 LeetCode76 最小覆盖子串 LeetCode75 颜色分类 LeetCode73 矩阵置零 LeetCode384 打乱数组 LeetCode581 最短无序连续子数组 LeetCode945 使数组唯一的最小增量 |
2、链表(Linked List)
包括链表的插入、删除、反转、环检测等操作,以及链表相关的问题如合并链表、判断链表是否相交等。
链表操作(插入、删除、查找等)
链表反转
链表中环的检测和处理
链表操作 |
快慢指针遍历 |
LeetCode206 反转链表 LeetCode19 删除链表的倒数第N个节点 LeetCode25 k个一组翻转链表 LeetCode141 环形链表 LeetCode142 环形链表Ⅱ LeetCode61 旋转链表 LeetCode138 复制带随机指针的链表 LeetCode160 相交链表 LeetCode707 设计链表 |
LeetCode141 环形链表 LeetCode202 快乐数 LeetCode876 链表的中间结点 |
3、栈和队列(Stacks and Queues)
包括栈和队列的实现、应用和常见问题,如最小栈、括号匹配、队列实现栈等。
栈的应用(括号匹配、后缀表达式求值等)
队列的应用(滑动窗口、任务调度等)
涉及到栈和队列的实现及其应用。典型例题有有效的括号、滑动窗口最大值等。
优先队列的应用和常见问题如前K个高频元素、合并K个排序数组等。
栈 |
双指针/滑动窗口 |
LeetCode20 有效的括号 LeetCode32 最长有效括号 LeetCode155 最小栈 LeetCode224 基本计算器 LeetCode232 用栈实现队列 LeetCode316 去除重复字母 |
LeetCode3 无重复字符的最长子串 LeetCode11 盛最多水的容器 LeetCode15 三数之和 LeetCode16 最接近的三数之和 LeetCode26 删除排序数组中的重复项 LeetCode42 接雨水 LeetCode121 买卖股票的最佳时机 LeetCode209 长度最小的子数组 |
4、树和二叉树(Trees and Binary Trees)
包括树和二叉树的遍历(前序、中序、后序、层序)、构建、操作和常见问题如验证二叉搜索树、求二叉树的最大深度等。
二叉树的遍历(前序、中序、后序、层次遍历)
二叉树的构建和修改
递归问题(斐波那契数列、汉诺塔等)
涉及到二叉树、二叉搜索树以及其他树的遍历、构造、查询等操作。典型例题有二叉树的中序遍历、路由器的最短路径等。
二叉树 |
二叉搜索树 |
LeetCode94 二叉树的中序遍历 LeetCode102 二叉树的层次遍历 LeetCode110 平衡二叉树 LeetCode144 二叉树的前序遍历 LeetCode145 二叉树的后序遍历 |
LeetCode98 验证二叉搜索树 LeetCode450 删除二叉搜索树中的节点 LeetCode701 二叉搜索树中的插入操作 |
堆的实现、堆排序、
5、图(Graph)
包括图的表示方法(邻接矩阵、邻接表)、遍历算法(深度优先搜索、广度优先搜索)和常见问题如查找最短路径、判断图是否连通等。
图的遍历(深度优先搜索、广度优先搜索)
最短路径问题(Dijkstra算法、Floyd-Warshall算法)
最小生成树问题(Kruskal算法、Prim算法)
涉及到图的遍历和最短路径算法。典型例题有岛屿数量、课程表等。
深度优先搜索与广度优先搜索。如单词接龙、 autonomous driving path planning等。
6、哈希表(Hash Table)
包括哈希表的实现、冲突解决方法、哈希函数设计和相关问题如两数之和、字母异位词分组等。涉及到哈希表的实现和查询等操作。典型例题有两个列表的交集、检查数组相对大小等。
7、排序和搜索(Sorting and Searching)
包括各种排序算法(冒泡排序、快速排序、归并排序等)和搜索算法(二分查找、深度优先搜索、广度优先搜索等)以及相关问题。
排序和查找
常见排序算法(快速排序、归并排序、堆排序等)
二分查找
哈希查找
如插入排序、归并排序、快速排序等。
8、动态规划(Dynamic Programming)
包括动态规划的概念、解题思路和常见问题如背包问题、最长递增子序列等。
最长公共子序列(LCS)
最长递增子序列(LIS)
背包问题(0-1背包、完全背包等)
涉及到动态规划的定义和实现。典型例题有爬楼梯、零钱兑换等。
最长公共子序列、爬楼梯等。
动态规划 |
|
LeetCode5 最长回文子串 LeetCode53 最大子序和 LeetCode62 不同路径 LeetCode64 最小路径和 LeetCode70 爬楼梯 LeetCode118 杨辉三角 LeetCode300 最长上升子序列 LeetCode1143 最长公共子序列 |
9、回溯法(Backtracking)
包括回溯法的原理、解题思路和典型问题如全排列、组合总和等。
全排列问题
N皇后问题
图的着色问题
涉及到回溯法的实现。典型例题有组合总和、字母异位词分组等。
回溯算法 |
|
LeetCode10 正则表达式匹配 LeetCode22 括号生成 LeetCode40 组合总和2 LeetCode46 全排列 |
10、递归
涉及到递归的定义和实现。典型例题有斐波那契数、N皇后问题等。
递归 |
|
LeetCode21 合并两个有序链表 LeetCode101 对称二叉树 LeetCode104 二叉树的最大深度 LeetCode226 翻转二叉树 LeetCode236 二叉树的最近公共祖先 |
11、贪心算法
区间调度问题
最小生成树问题(Kruskal算法、Prim算法)
霍夫曼编码
贪心算法 |
|
LeetCode 11. 盛最多水的容器 LeetCode 406. 根据身高重建队列 LeetCode 55. 跳跃游戏 LeetCode 122. 买卖股票的最佳时机 II LeetCode 309. 最佳买卖股票时机含冷冻期 LeetCode 714. 买卖股票的最佳时机含手续费 |
12、分治算法
归并排序
快速排序
大整数乘法(Karatsuba算法)