# algorithm-study **Repository Path**: monday-pro/algorithm-study ## Basic Information - **Project Name**: algorithm-study - **Description**: 记录自己学习算法的过程 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2021-12-22 - **Last Updated**: 2022-01-23 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 一、仓库介绍 **程序 = 算法 + 数据结构** 建这个仓库的目的,一方面想真实的记录自己一步一步学习算法的过程,另一方面等到1年、2年、5年、10年后再回看或许会有温故而知新的感觉。 经过最近的练习,渐渐发现算法确实很锻炼人的**逻辑思维**能力,在写代码的过程中,也能真实发现**coding能力**的提升。 我们都深知,算法的练习是无穷无尽的,一旦开始,就没有结束,给每一个准备学习算法、正在学习算法的自己说声加油,**一起加油,奥利给**。 # 二、文章和代码 **Github地址**:https://github.com/monday-pro/algorithm-study **Gitee地址**:https://gitee.com/monday-pro/algorithm-study **持续更新中**,目前以一些基本的算法和解题套路为主。 | 题目 | 文章地址 | 所有代码 | | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | | 基础数据结构--链表的练习 | [文章](https://mp.weixin.qq.com/s/tZ3aI_AldoT8dxzZLtX_LA) | | | 基础数据结构--栈和队列的练习 | [文章](https://mp.weixin.qq.com/s/ZE9VPxZ1rx3BxS7waKVAAA) | [代码1](src/basic/stackqueue/TwoQueuesImplementStack.java),[代码2](src/basic/stackqueue/TwoStacksImplementQueue.java) | | 归并排序以及Master公式 | [文章](https://mp.weixin.qq.com/s/V_Ac1UnqJbJbZ89gVvKXHg) | [代码](src/basic/mergesort/MergeSort.java) | | 归并排序:解决小和,逆序对问题 | [文章](https://mp.weixin.qq.com/s/6FdL3bm8LkmhWsKsRSSn3A) | [代码1](src/basic/mergesort/SmallSum.java),[代码2](src/basic/mergesort/ReversePair.java) | | 归并排序:大于右侧数两倍,LeetCode327. 区间和的个数 | [文章](https://mp.weixin.qq.com/s/iejFWetKVOs3BXpClQLx9w) | [代码1](src/basic/mergesort/BiggerThanRightTwice.java),[代码2](src/basic/mergesort/CountOfRangeSum.java) | | 荷兰国旗问题以及快速排序 | [文章](https://mp.weixin.qq.com/s/5wyGMkUSaC0txSYkVc2prA) | [代码](src/basic/quicksort/QuickSort.java) | | 堆和堆排序 | [文章](https://mp.weixin.qq.com/s/AyMfxFu4MQv3kBM8UwBA4Q) | [代码1](src/basic/heap/Heap.java),[代码2](src/basic/heap/HeapSort.java) | | 与堆有关的题目:几乎有序的数组排序,最大线段重合问题 | [文章](https://mp.weixin.qq.com/s/4PUaS2gj7tul4u69imKDaQ) | [代码1](src/basic/heap/SortArrayDistanceLessK.java),[代码2](src/basic/heap/LineCoverMax.java) | | 前缀树 | [文章](https://mp.weixin.qq.com/s/TImX032ttO_KOdmzYhDC3g) | [代码](src/basic/trietree/TrieTree.java) | | 排序算法总结 | [文章](https://mp.weixin.qq.com/s/CFV8jkAcnFgKrCFFNe78aA) | | | 不基于比较的排序:基数排序,计数排序 | [文章](https://mp.weixin.qq.com/s/Wg8sK_59BW6u70qaZztviw) | [代码1](src/basic/nocomparesort/RadixSort.java),[代码2](src/basic/nocomparesort/CountSort.java) | | 链表相关题目:判断链表是不是回文结构,将单向链表划分成左边小、中间等、右边大的形式 | [文章](https://mp.weixin.qq.com/s/Z4Z-cwPUfIvpuA1VqAMSvQ) | [代码1](src/basic/node/IsPalindromeList.java),[代码2](src/basic/node/SmallerEqualBigger.java) | | LeetCode 138. 复制带随机指针的链表 | [文章](https://mp.weixin.qq.com/s/Vm9jFa6cM2ar-hOO4SpCYg) | [代码](src/basic/node/CopyListWithRandom.java) | | 有环或无环单链表的相交问题 | [文章](https://mp.weixin.qq.com/s/MjsSwWOo-txyGBYvo6Ihuw) | [代码](src/basic/node/FindFirstIntersectNode.java) | | 二叉树基本算法 | [文章](https://mp.weixin.qq.com/s/UxH4yST7JaQz9QAuO6anHQ) | [代码1](src/basic/binarytree/LevelTraversalBinaryTree.java),[代码2](src/basic/binarytree/RecursiveTraversalBinaryTree.java),[代码3](src/basic/binarytree/UnRecursiveTraversalBinaryTree.java), | | 二叉树的序列化和反列化 | [文章](https://mp.weixin.qq.com/s/iirR_-W4bLHzn-WqCMJ-LA) | [代码](src/basic/binarytree/SerializeAndDeserializeTree.java) | | 求二叉树最宽的层有多少个节点 | [文章](https://mp.weixin.qq.com/s/dOGeIRJ6y46CqByJ9WGq2A) | [代码](src/basic/binarytree/TreeMaxWidth.java) | | 查询后继节点、纸条折痕问题 | [文章](https://mp.weixin.qq.com/s/gSvEsKrFPjxxCydlHS25og) | [代码1](src/basic/binarytree/SuccessorNode.java),[代码2](src/basic/binarytree/PaperFolding.java) | | 二叉树递归套路:判断二叉树是否是完全二叉树、判断二叉树是否是平衡二叉树 | [文章](https://mp.weixin.qq.com/s/TrGxwyEaq2y6LLaivk66bQ) | [代码1](src/basic/binarytree/IsCompleteBinaryTree.java),[代码2](src/basic/binarytree/IsBalancedBinaryTree.java) | | 二叉树递归套路(2):判断二叉树是否是搜索二叉树、二叉树的最大距离 | [文章](https://mp.weixin.qq.com/s?__biz=Mzg2NTYwMDM0Mg==&mid=2247486612&idx=1&sn=3a767209658b10c5ff8006bcfdd15eb3&chksm=ce56daadf92153bbb2875e0e81d4c465c58aed7f174174748199a4d97b118f80129414c20a16&scene=178&cur_album_id=2085925789451059201#rd) | [代码1](src/basic/binarytree/IsSearchBinaryTree.java),[代码2](src/basic/binarytree/MaxDistance.java) | | 二叉树递归套路(3):判断是否是满二叉树、最大子搜索二叉树的节点数 | [文章](https://mp.weixin.qq.com/s?__biz=Mzg2NTYwMDM0Mg==&mid=2247486622&idx=1&sn=cc582db8edd6a53da24bc819f4f5780a&chksm=ce56daa7f92153b1316bce79c49188e4ed485bc693f510779c58b3527465115ca3337be94b83&scene=178&cur_album_id=2085925789451059201#rd) | [代码1](src/basic/binarytree/IsFullBinaryTree.java),[代码2](src/basic/binarytree/MaxSubSearchBinaryTreeSize.java) | | 二叉树递归套路(4):最低公共祖先、派对的最大快乐值 | [文章](https://mp.weixin.qq.com/s?__biz=Mzg2NTYwMDM0Mg==&mid=2247486643&idx=1&sn=3205d61e35fdb826dbf0c5ab03695fef&chksm=ce56da8af921539c22e2773a1331202ecfe28e8a4a998799f6385e873601cea1d1cfd5d4d6cb&scene=178&cur_album_id=2085925789451059201#rd) | [代码1](src/basic/binarytree/LowestAncestor.java),[代码2](src/basic/binarytree/MaxHappy.java) | | 贪心算法:概念、字典序最小的字符串、会议室问题 | [文章](https://mp.weixin.qq.com/s?__biz=Mzg2NTYwMDM0Mg==&mid=2247486651&idx=1&sn=fe3ff07faa96a07797a23867139b27ba&chksm=ce56da82f92153947b340b51ce53e722ccf7d57306a5b2da43234d310863d4bfb4dbc82ef0b3&scene=178&cur_album_id=2085925789451059201#rd) | [代码1](src/basic/greedy/LowestDictionary.java),[代码2](src/basic/greedy/BestArrange.java) | | 贪心算法(2):金条切割问题、点灯问题、LeetCode 502. IPO问题 | [文章](https://mp.weixin.qq.com/s?__biz=Mzg2NTYwMDM0Mg==&mid=2247486661&idx=1&sn=81374bd04170c73c556d9d75754e4b92&chksm=ce56dafcf92153ea387366d6ddd8eb289eb48306c41cca8d8b573248ad65e62bbc751813dbe8&scene=178&cur_album_id=2085925789451059201#rd) | [代码1](src/basic/greedy/LessMoneySplitGold.java),[代码2](src/basic/greedy/Light.java),[代码3](src/basic/greedy/IPO.java) | | 并查集:概念、LeetCode 547. 省份数量问题 | [文章](https://mp.weixin.qq.com/s?__biz=Mzg2NTYwMDM0Mg==&mid=2247486679&idx=1&sn=5ff2d256185974b2ffc09918cc9dd3fc&chksm=ce56daeef92153f80c30c7bdbc5caa2b00dbfd0334ddc5f0f658d459dafcdfad90e46974dae8&scene=178&cur_album_id=2085925789451059201#rd) | [代码1](src/basic/unionfind/TheUnionFind.java),[代码2](src/basic/unionfind/FindCircleNum.java) | | 并查集练习:LeetCode200 岛屿数量 | [文章](https://mp.weixin.qq.com/s?__biz=Mzg2NTYwMDM0Mg==&mid=2247486690&idx=1&sn=5769a9f643629d79a1bfe422c794aa87&chksm=ce56dadbf92153cd41c29c91a3315fbf8311adfa6e7d207cae26c37186d0f01f395f0c835aa8&scene=178&cur_album_id=2085925789451059201#rd) | [代码](src/basic/unionfind/NumIslands.java) | | 一口气说完 图 的关键算法 | [文章](https://mp.weixin.qq.com/s?__biz=Mzg2NTYwMDM0Mg==&mid=2247486716&idx=1&sn=4be9917680ec50757a922e1b01bf4bf2&chksm=ce56dac5f92153d3f3b506769c4eb7f92618c5430c50719d87d4d96c8fe01e784f72d334f2e9&scene=178&cur_album_id=2085925789451059201#rd) | [代码](src/basic/graph) | | 从 最具启发性的汉诺塔问题开始 聊递归 | [文章](https://mp.weixin.qq.com/s?__biz=Mzg2NTYwMDM0Mg==&mid=2247486765&idx=1&sn=1e81186fd36f89c3055669c978dab492&chksm=ce56db14f9215202d9b1bcfa0c40f715bbb9b650091d29ef34ae55d246ac05aa07c83093d53f&scene=178&cur_album_id=2085925789451059201#rd) | [代码](src/basic/dynamicprogramming/recursion) | | 从暴力递归到动态规划(1):概念、机器人移动问题、纸牌问题 | [文章](https://mp.weixin.qq.com/s?__biz=Mzg2NTYwMDM0Mg==&mid=2247486820&idx=1&sn=74249b8f822267e89435f54e93ff8879&chksm=ce56db5df921524b919459f53f5ae18318daf11e4010ddd14692c5533be192e6ec06f41bb5e3&scene=178&cur_album_id=2085925789451059201#rd) | [代码1](src/basic/dynamicprogramming/RobotWalk.java),[代码2](src/basic/dynamicprogramming/CardsInLine.java) | | 从暴力递归到动态规划(2):背包问题、数字转字母问题 | [文章](https://mp.weixin.qq.com/s?__biz=Mzg2NTYwMDM0Mg==&mid=2247486862&idx=1&sn=3d2d1379e24b0141b40b729383e7dd90&chksm=ce56dbb7f92152a10da203af8badd58e6436480afb9f6707d75ec861991a2515dfbd515fc2e4&scene=178&cur_album_id=2085925789451059201#rd) | [代码1](src/basic/dynamicprogramming/Knapsack.java),[代码2](src/basic/dynamicprogramming/ConvertToLetterString.java) | # 三、LeetCode题解 在上面讲解基本的算法和解题套路时,已经涉及到了部分LeetCode题目的解题思路,为了方便查看,单独将已经涉及的LeetCode题解剥离出来。 另一方面,在学完了基本的算法和解题套路时,后面再涉及的题目大多都会来自LeetCode,也方便后期本项目的维护。 | LeetCode题目 | 题解文章地址 | 代码地址 | | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------ | | [327. 区间和的个数](https://leetcode-cn.com/problems/count-of-range-sum/) | [题解地址](https://mp.weixin.qq.com/s?__biz=Mzg2NTYwMDM0Mg==&mid=2247484635&idx=1&sn=9f7ef3e2cf8d04d460ae385acb100aae&chksm=ce56d2e2f9215bf47af97213c2ca8086c853d678c08e130600aceb03766f50012bfd3ba6e3c4&token=1551232008&lang=zh_CN#rd) | [代码](src/basic/mergesort/CountOfRangeSum.java) | | [138. 复制带随机指针的链表](https://leetcode-cn.com/problems/copy-list-with-random-pointer/) | [题解地址](https://mp.weixin.qq.com/s?__biz=Mzg2NTYwMDM0Mg==&mid=2247486369&idx=1&sn=937e8cd7e8797ffad86a2985e345fefb&chksm=ce56dd98f921548ef0137db83da468c63012477474958639958e283c0df704aa19de614ea833&token=1551232008&lang=zh_CN#rd) | [代码](src/basic/node/CopyListWithRandom.java) | | [502. IPO问题](https://leetcode-cn.com/problems/ipo) | [题解地址](https://mp.weixin.qq.com/s?__biz=Mzg2NTYwMDM0Mg==&mid=2247486661&idx=1&sn=81374bd04170c73c556d9d75754e4b92&chksm=ce56dafcf92153ea387366d6ddd8eb289eb48306c41cca8d8b573248ad65e62bbc751813dbe8&token=1551232008&lang=zh_CN#rd) | [代码](src/basic/greedy/IPO.java) | | [547. 省份数量](https://leetcode-cn.com/problems/number-of-provinces/) | [题解地址](https://mp.weixin.qq.com/s?__biz=Mzg2NTYwMDM0Mg==&mid=2247486679&idx=1&sn=5ff2d256185974b2ffc09918cc9dd3fc&chksm=ce56daeef92153f80c30c7bdbc5caa2b00dbfd0334ddc5f0f658d459dafcdfad90e46974dae8&token=1551232008&lang=zh_CN#rd) | [代码](src/basic/unionfind/FindCircleNum.java) | | [200. 岛屿数量](https://leetcode-cn.com/problems/number-of-islands/) | [题解地址](https://mp.weixin.qq.com/s?__biz=Mzg2NTYwMDM0Mg==&mid=2247486690&idx=1&sn=5769a9f643629d79a1bfe422c794aa87&chksm=ce56dadbf92153cd41c29c91a3315fbf8311adfa6e7d207cae26c37186d0f01f395f0c835aa8&token=1551232008&lang=zh_CN#rd) | [代码](src/basic/unionfind/NumIslands.java) |