# AlgorithmPractice
**Repository Path**: code_ssh/AlgorithmPractice
## Basic Information
- **Project Name**: AlgorithmPractice
- **Description**: 数据结构+算法的java实践,本项目通过分解各大厂的常见笔面试题,追本溯源至数据结构和算法的底层实现原理,知其然知其所以然
- **Primary Language**: Java
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 17
- **Created**: 2020-11-20
- **Last Updated**: 2020-12-19
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
算法和数据结构的Java实践
## 项目介绍
+ 本项目通过收集、分解各大厂的常见笔面试题,追本溯源至数据结构和算法的底层实现原理,知其然知其所以然,欢迎更多志同道合的朋友加入算法开源项目:[AlgorithmPractice](https://gitee.com/ljfirst/AlgorithmPractice)(欢迎提issue和pull request)。
+ 本项目主要包括四个部分,分别是:算法、数据结构、设计模式、以及上述三个部分的单元测试,项目简图如图1-1所示:

图 1-1 AlgorithmPractice项目结构简图
### 阅读建议
+ 首先,你可以通过我的 [思维导图](https://www.processon.com/mindmap/5cbb5fcae4b09b16ffc06360),对项目整体架构有个了解,
+ 然后,可以跳转到我的 [博客](https://blog.csdn.net/ljfirst) 查看设计思路和实现细节,
+ 最后,通过跳转至我的 [gitee](https://gitee.com/ljfirst/Algorithm) 查看具体的实现代码.
### 目前的代码量
| | Total | Algorithm | DataStructure | DesignPattern |
| -------- |:-----: | :----: | :-----: | :-----: |
| Code | 236 | 50 | 138 | 41 |
| UT | 152 | 39 | 101 | 10 |
## 特色合集
+ [常见动态规划的解题思路及Java实现](https://blog.csdn.net/ljfirst/article/details/103082359)
+ [11种常见设计模式的简单Demo实现](https://blog.csdn.net/ljfirst/article/details/105470727)
+ [最长递增子序列的六种解法](https://blog.csdn.net/ljfirst/article/details/106596812)
+ [最热笔试题:利用滑动窗口来解决字符串匹配](https://blog.csdn.net/ljfirst/article/details/106972100)
+ [13道字符串笔试题及答案,总有一道你面试会遇上](https://blog.csdn.net/ljfirst/article/details/106975010)
# 具体的项目目录结构
#### $\color{7f1A8A}Algorithm/算法专题$
****
+ **综合解法题**
+ **背包问题**
+ [动态规划、分支限界法(回溯法、剪枝法)、贪心算法](https://blog.csdn.net/ljfirst/article/details/109376733)
+ [背包问题解决公司零食采购(贪心+冒泡+动态)](https://blog.csdn.net/ljfirst/article/details/107498635) 和 [测试案例](https://gitee.com/ljfirst/AlgorithmPractice/tree/master/javaVersion/UnitTest/AlgorithmTest/combineTest/backpackTest/implyTest)
+ **合唱团问题**
+ [动态规划、回溯法](https://gitee.com/ljfirst/AlgorithmPractice/tree/master/javaVersion/Algorithm/comprehensive/choir) 和 [测试案例](https://gitee.com/ljfirst/AlgorithmPractice/tree/master/javaVersion/UnitTest/AlgorithmTest/combineTest/choirTest)
+ **最短路径**
+ [回溯法、贪心算法](https://gitee.com/ljfirst/AlgorithmPractice/tree/master/javaVersion/Algorithm/comprehensive/shortestDeliveryPath) 和 [测试案例](https://gitee.com/ljfirst/AlgorithmPractice/tree/master/javaVersion/UnitTest/AlgorithmTest/combineTest/shortestDeliveryPathTest)
+ **最长递增子序列**
+ [暴力法、动态规划法、分治法、字符串对比法、分支限界法、扑克法](https://blog.csdn.net/ljfirst/article/details/106596812) 和 [测试案例](https://gitee.com/ljfirst/AlgorithmPractice/tree/master/javaVersion/UnitTest/AlgorithmTest/combineTest/lisTest)
+ **动态规划专题**
+ **最大正方形**
+ [暴力法、动态规划、动态规划优化](https://gitee.com/ljfirst/AlgorithmPractice/tree/master/javaVersion/Algorithm/dynamic/largestSquare) 和 [测试案例](https://gitee.com/ljfirst/AlgorithmPractice/tree/master/javaVersion/UnitTest/AlgorithmTest/dynamicTest/largestSquareTest)
+ **最长公共子序列**
+ [动态规划、动态规划优化](https://gitee.com/ljfirst/AlgorithmPractice/tree/master/javaVersion/Algorithm/dynamic/dynamicPrimary/lcs) 和 [测试案例](https://gitee.com/ljfirst/AlgorithmPractice/tree/master/javaVersion/UnitTest/AlgorithmTest/dynamicTest/LCSTest.java)
+ **最大子段和**
+ [动态规划、分治法](https://gitee.com/ljfirst/AlgorithmPractice/tree/master/javaVersion/Algorithm/dynamic/dynamicPrimary/lss) 和 [测试案例](https://gitee.com/ljfirst/AlgorithmPractice/tree/master/javaVersion/UnitTest/AlgorithmTest/dynamicTest/LSSTest.java)
+ **回文串**
+ [添加构造回文串、删除构造回文串、回文串判定、回文串判定优化](https://gitee.com/ljfirst/AlgorithmPractice/tree/master/javaVersion/Algorithm/dynamic/dynamicPrimary/palindrome) 和 [测试案例](https://gitee.com/ljfirst/AlgorithmPractice/tree/master/javaVersion/UnitTest/AlgorithmTest/dynamicTest/PalindromeTest)
+ **其他**
+ [交换零钱、斐不拉楔数列、编辑距离、矩形的最小路径和、三角形的最小路径和、数字的最大乘积、字符组成判断、打家劫舍](https://gitee.com/ljfirst/AlgorithmPractice/tree/master/javaVersion/Algorithm/dynamic) 和 [测试案例](https://gitee.com/ljfirst/AlgorithmPractice/tree/master/javaVersion/UnitTest/AlgorithmTest/dynamicTest)
+ **回溯专题**
+ [最佳调度问题](https://gitee.com/ljfirst/AlgorithmPractice/tree/master/javaVersion/Algorithm/backtrack/OptimalSchedule) 和 [测试案例](https://gitee.com/ljfirst/AlgorithmPractice/tree/master/javaVersion/UnitTest/AlgorithmTest/backtrackTest/OptimalScheduleTest)
+ [字符串全排列](https://gitee.com/ljfirst/AlgorithmPractice/tree/master/javaVersion/Algorithm/backtrack/StringCombination) 和 [测试案例](https://gitee.com/ljfirst/AlgorithmPractice/tree/master/javaVersion/UnitTest/AlgorithmTest/backtrackTest/StringCombinationTest)
+ **贪心专题**
+ [无重叠区间](https://gitee.com/ljfirst/AlgorithmPractice/tree/master/javaVersion/Algorithm/greedy/EraseOverlapIntervals) 和 [测试案例](https://gitee.com/ljfirst/AlgorithmPractice/tree/master/javaVersion/UnitTest/AlgorithmTest/greedyTest/EraseOverlapIntervalsTest.java)
+ 迪杰斯特拉算法
#### $\color{7f1A8A}DataStructure /数据结构专题$
****
+ **图专题**
+ BellmanFord.java
+ Floyd.java
+ graphApply
+ graphConnection
+ mst
+ shortestPath
+ **字符串和数组专题**
+ **数组专题**
+ [双指针问题](https://gitee.com/ljfirst/AlgorithmPractice/tree/master/javaVersion/DataStructure/stringANDline/array/doublePoint) 和 [测试案例](https://gitee.com/ljfirst/AlgorithmPractice/tree/master/javaVersion/UnitTest/DatastructureTest/stringANDlineTest/arrayTest/doublePointTest)
+ [异或问题](https://blog.csdn.net/ljfirst/article/details/108328921)
+ [查找数值](https://gitee.com/ljfirst/AlgorithmPractice/tree/master/javaVersion/DataStructure/stringANDline/array/findValue) 和 [测试案例](https://gitee.com/ljfirst/AlgorithmPractice/tree/master/javaVersion/UnitTest/DatastructureTest/stringANDlineTest/arrayTest/findValueTest)
+ [大整数乘法、根据身高重建队列、顺时针打印螺旋矩阵、前缀和/差分数组、盛水问题、矩阵相乘、找出重复数组中不重复的个数、杨辉三角](https://gitee.com/ljfirst/AlgorithmPractice/tree/master/javaVersion/DataStructure/stringANDline/array) 和 [测试案例](https://gitee.com/ljfirst/AlgorithmPractice/tree/master/javaVersion/UnitTest/DatastructureTest/stringANDlineTest/arrayTest)
+ **哈希专题**
+ **链表专题**
+ [单链表的插入、删除、查找、相等](https://gitee.com/ljfirst/AlgorithmPractice/blob/master/javaVersion/DataStructure/stringANDline/list/listRealize/SinglyLinkedList.java) 和 [测试案例](https://gitee.com/ljfirst/AlgorithmPractice/blob/master/javaVersion/UnitTest/DatastructureTest/stringANDlineTest/listTest/SinglyLinkedListTest.java)
+ [链表的反转有多少种方式](https://blog.csdn.net/ljfirst/article/details/109508557)
+ [有环链表和相交链表](https://gitee.com/ljfirst/AlgorithmPractice/blob/master/javaVersion/DataStructure/stringANDline/list/listRealize/RingList.java) 和 [测试案例](https://gitee.com/ljfirst/AlgorithmPractice/tree/master/javaVersion/UnitTest/DatastructureTest/stringANDlineTest/listTest/RingListTest.java)
+ [双向链表的插入、删除、查找、相等](https://gitee.com/ljfirst/AlgorithmPractice/blob/master/javaVersion/DataStructure/stringANDline/list/listRealize/DoubleLinkedList.java) 和 [测试案例](https://gitee.com/ljfirst/AlgorithmPractice/blob/master/javaVersion/UnitTest/DatastructureTest/stringANDlineTest/listTest/DoubleLinkedListTest.java)
+ [Redis底层数据结构:跳表的实现](https://blog.csdn.net/ljfirst/article/details/104504763)
+ **序列和字符串题目集锦**
+ [人民币大小写转换、找所有字母异位词、最小循环的字符串、最长无重复子串、最小覆盖子串、IP地址转化、反转字符串](https://gitee.com/ljfirst/AlgorithmPractice/tree/master/javaVersion/DataStructure/stringANDline/sequenceANDstring) 和 [测试案例](https://gitee.com/ljfirst/AlgorithmPractice/tree/master/javaVersion/UnitTest/DatastructureTest/stringANDlineTest/sequenceANDstringTest)
+ **字符串匹配专题**
+ [五大经典字符串匹配算法的Java代码实现](https://blog.csdn.net/ljfirst/article/details/104448266)
+ BF、BM、RK、KMP、Sunday
+ **排序专题**
+ 外部排序
+ 内部排序
+ [十大经典内部排序算法的设计思路及应用](https://blog.csdn.net/ljfirst/article/details/102762758)
+ 冒泡、堆排、插入、选择、桶排、
+ 计数、归并、基数、希尔、快排及其改进
+ **堆栈队列**
+ [返回最小的第K个值、返回最小的K个值、优先队列](https://gitee.com/ljfirst/AlgorithmPractice/tree/master/javaVersion/DataStructure/stackHeapQueue/heap) 和 [测试案例]()
+ [链队、数组队、用栈实现队](https://gitee.com/ljfirst/AlgorithmPractice/tree/master/javaVersion/DataStructure/stackHeapQueue/queue) 和 [测试案例]()
+ [链栈、数组栈、最小栈、最小栈优化、计算器的实现、括号匹配问题、队列实现栈](https://gitee.com/ljfirst/AlgorithmPractice/tree/master/javaVersion/DataStructure/stackHeapQueue/heap) 和 [测试案例]()
+ **树**
+ **二叉树**
+ [二叉树的序列化和反序列化](https://blog.csdn.net/ljfirst/article/details/109466318)
+ 二叉树按层(S形、先序、中序、后序)遍历 ==输出==
+ 数组按层(先序、中序、后序)遍历、前序和中序序列(后序和中序) ==构造==成一个二叉树
+ 二叉树转链表
+ [镜像二叉树、平衡二叉树判断、二叉树子树判读、最近公共祖先、二叉树中和为某值的节点路径]() 和 [测试案例]()
+ [b树]()
+ [赫夫曼树]() 和 [测试案例]()
+ [红黑树]() 和 [测试案例]()
#### $\color{7f1A8A}Design Pattern /设计模式专题$
****
+ [Singleton 单例模式](https://gitee.com/ljfirst/AlgorithmPractice/tree/master/javaVersion/DesignPattern/single) 和 [测试案例](https://gitee.com/ljfirst/AlgorithmPractice/tree/master/javaVersion/UnitTest/DesignPatternTest/singleTest)
+ [Proxy 代理模式](https://gitee.com/ljfirst/AlgorithmPractice/tree/master/javaVersion/DesignPattern/proxy) 和 [测试案例](https://gitee.com/ljfirst/AlgorithmPractice/tree/master/javaVersion/UnitTest/DesignPatternTest/proxyTest)
+ [Strategy 策略模式](https://gitee.com/ljfirst/AlgorithmPractice/tree/master/javaVersion/DesignPattern/strategy) 和 [测试案例](https://gitee.com/ljfirst/AlgorithmPractice/tree/master/javaVersion/UnitTest/DesignPatternTest/strategyTest)
+ [Observer 观察者模式](https://gitee.com/ljfirst/AlgorithmPractice/tree/master/javaVersion/DesignPattern/observer) 和 [测试案例](https://gitee.com/ljfirst/AlgorithmPractice/tree/master/javaVersion/UnitTest/DesignPatternTest/observerTest)
+ [Visitor 访问者模式](https://gitee.com/ljfirst/AlgorithmPractice/tree/master/javaVersion/DesignPattern/visitor) 和 [测试案例](https://gitee.com/ljfirst/AlgorithmPractice/tree/master/javaVersion/UnitTest/DesignPatternTest)
+ [Factory 工厂模式](https://gitee.com/ljfirst/AlgorithmPractice/tree/master/javaVersion/DesignPattern/factory) 和 [测试案例](https://gitee.com/ljfirst/AlgorithmPractice/tree/master/javaVersion/UnitTest/DesignPatternTest)
+ [Delegate 委派模式](https://gitee.com/ljfirst/AlgorithmPractice/tree/master/javaVersion/DesignPattern) 和 [测试案例](https://gitee.com/ljfirst/AlgorithmPractice/tree/master/javaVersion/UnitTest/DesignPatternTest)
+ [Prototype 原型模式](https://gitee.com/ljfirst/AlgorithmPractice/tree/master/javaVersion/DesignPattern) 和 [测试案例](https://gitee.com/ljfirst/AlgorithmPractice/tree/master/javaVersion/UnitTest/DesignPatternTest)
+ [Template 模板模式](https://gitee.com/ljfirst/AlgorithmPractice/tree/master/javaVersion/DesignPattern) 和 [测试案例](https://gitee.com/ljfirst/AlgorithmPractice/tree/master/javaVersion/UnitTest/DesignPatternTest)
+ [Adapter 适配器模式](https://gitee.com/ljfirst/AlgorithmPractice/tree/master/javaVersion/DesignPattern) 和 [测试案例](https://gitee.com/ljfirst/AlgorithmPractice/tree/master/javaVersion/UnitTest/DesignPatternTest)
+ [Builder 构造器设计模式](https://gitee.com/ljfirst/AlgorithmPractice/tree/master/javaVersion/DesignPattern/builder) 和 [测试案例](https://gitee.com/ljfirst/AlgorithmPractice/tree/master/javaVersion/UnitTest/builderTest)
$\color{ff1f1f}至简尚善,有知仍无畏$
---