算法和数据结构的Java/Go实践
�项目介绍
- 本项目通过收集、分解各大厂的常见笔面试题,追本溯源至数据结构和算法的底层实现原理,采用Java和Go语言实现,配套测试数据和案例让代码更加准确。
- 算法项目开源地址:AlgorithmPractice(欢迎练手的同学提 issue 和 PR 以及 Star)。
- 本项目主要包括四个部分,分别是:算法、数据结构、设计模式、以及上述三个部分的单元测试,项目简图如图1-1所示:
图 1-1 AlgorithmPractice项目结构简图
�️阅读建议
- 本项目所有的测试案例已经迁移至腾讯云,需要从额外的conf配置文件中获取连接信息,否则无法全量测试,可以私聊获取PR的方式获取conf文件
- 阅读顺序
代码统计
�Java语言入口
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-l1SAnoOV-1658686815583)(https://img.shields.io/badge/Java_Code_Num-571-brightgreen.svg)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MoD1Gv4U-1658686815584)(https://img.shields.io/badge/Java_Code_Line-34798-blue.svg)]
JavaVersion | Total | Algorithm | DataStructure | DesignPattern |
---|---|---|---|---|
Code/UT | 328/ 243 | 95/ 71 | 197/ 162 | 36/ 10 |
CodeNum/TestNum | 20499/ 14299 | 5858/ 4125 | 13677/ 9821 | 964/ 353 |
�go语言入口
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LDfREQ4A-1658686815585)(https://img.shields.io/badge/GO_Code_Num-66-brightgreen.svg)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DIAEMc7i-1658686815586)(https://img.shields.io/badge/GO_Code_Line-2096-blue.svg)]
GoVersion | Total | Algorithm | DataStructure | DesignPattern |
---|---|---|---|---|
Code/UT | 34/ 32 | 2/ 3 | 31/ 28 | 1/ 1 |
CodeNum/TestNum | 1439/ 657 | 64/ 57 | 1374/ 599 | 1/ 1 |
�特色合集
- 特色合集的代码接口在:Topic
- 动态规划
- 设计模式
- 字符串
- 数据结构基础:
�具体的项目目录结构
� A l g o r i t h m / 算法专题 \color{7f1A8A}Algorithm/算法专题 Algorithm/算法专题
-
回溯专题
-
综合解法题
- 背包问题 (backpack)
- 最长递增子序列 (LIS)
- 最佳调度问题 (optimalSchedule)
- 最短路径 (shortestDeliveryPath)
- 子段和/积问题 (sumofSubSequence)
-
动态规划专题
- 最大正方形
- 最长公共子序列
- 最大子段和
- 回文串
- 其他
-
贪心专题
-
数学专题
� D a t a S t r u c t u r e / 数据结构专题 \color{7f1A8A}DataStructure /数据结构专题 DataStructure/数据结构专题
-
数组和链表
- 数组应用
- 数组操作
- 数组变换
- 双指针问题
- 查找值
- 哈希专题
- 链表
- 异或操作
-
图专题
-
字符串和序列
- 滑动窗口
- 序列和字符串
- 字符串匹配专题
- 五大经典字符串匹配算法的Java代码实现(BF、BM、RK、KMP、Sunday)
-
排序专题
- 外部排序
- 内部排序
- 十大经典内部排序算法的设计思路及应用
- 冒泡、堆排、插入、选择、桶排
- 计数、归并、基数、希尔、快排及其改进
- 链表的插入排序、指定区间的插入排序 和 测试案例
- 十大经典内部排序算法的设计思路及应用
-
堆栈队列
-
树
� D e s i g n P a t t e r n / 设计模式专题 \color{7f1A8A}Design Pattern /设计模式专题 DesignPattern/设计模式专题
- Singleton 单例模式 和 测试案例
- Proxy 代理模式 和 测试案例
- Strategy 策略模式 和 测试案例
- Observer 观察者模式 和 测试案例
- Visitor 访问者模式 和 测试案例
- Factory 工厂模式 和 测试案例
- Delegate 委派模式 和 测试案例
- Prototype 原型模式 和 测试案例
- Template 模板模式 和 测试案例
- Adapter 适配器模式 和 测试案例
- Builder 构造器设计模式 和 测试案例
Tips
-
全文搜一下关键词可能会有助于更好的使用
- tips:解决题目问题需要思考到的点
- attention:做题目时经常会忽略的一些细节【注意事项/边界条件】
- grammar:表示Java语法的一些用法,方便快捷的找出最佳用法
-
如何便捷地进行测试
- 每个类都加上了UTFactory的测试用法
- test()方法:调用了UTFactory的FullTest,表示验证功能,用于全量测试,调试时会连接一台有测试案例的数据库,并对所有测试案例进行测试,可能会出现下列情况:
- 缺少测试案例
- 解决方法:调用insert方法进行数据补充
- 方法没有执行
- 解决方法:定位没有执行的原因
- 输入输出的数据格式获取/转换错误
- 解决方法:定位数据格式获取/转换错误的原因
- 缺少测试案例
-
double_track()方法:调用了UTFactory的DoubleTrackTest,表示调试功能,用于复现错误测试案例,使用时需要手动粘贴FullTest运行时的的报错的input和output即可,方便进行断点调试