# algorithm_work **Repository Path**: dedSec7wen/algorithm_work ## Basic Information - **Project Name**: algorithm_work - **Description**: 算法练习册 - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-01-19 - **Last Updated**: 2025-05-21 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 算法与数据结构练习册。 前期主要以数据结构为主,后续添加算法,不限使用语言,但是 **禁用** 各个语言的算法api。 注意:测试代码请一并上传,只有自己测试通过后在该题目累加done。 --- # 二零二五一月 2025-01-19 - 实现int数组,可指定容量完成增删改查(增加有插中间插头插尾,删除有删中间删首尾) 例如容量为4的数组: `[4,5,6,0]`在下标为1的地方插入8,则数组变成`[4,8,5,6]`; 删除下标为1的数据,则数组变成`[4,6,0,0]`。done(2) 2025-01-20 - 类型可变的数组,不局限于int,其他数据类型例如long,float,double,对象(如果语言机制有)等都可使用该数组。done(2) 2025-01-22 - 在类型可变的数组上增加扩缩容因子与扩缩容机制,(扩缩容因子:如果添加一个元素后超过`当前容量*扩容因子`就开始扩容,扩容容量为当前容量的一倍,也就是<<1),缩容同理。done(2) - 栈型数据结构(增删查)。 done(2) - 队列型基本数据结构(增删查)。done(2) 2025-01-23 - 队列型循环队列结构(设计算法,改善数组增删数据的性能问题)。done(2) 2025-01-24 - 链表型基本数据结构(增删改查)。done(2) 2025-01-27 - 使用链表结构完成链表倒转(输入一个头节点E(1,2,3,4),输出E(4,3,2,1))。done(2) 2025-01-29 - 基于链表的栈型数据结构。done(2) - 基于链表的队列型数据结构。done(2) - 求数组和,例如,输入`int[]{1,2,3,4,5}`,输出`15`,输入空数组,也要输出空数组。done(2) - leeCode:https://leetcode.cn/problems/shan-chu-lian-biao-de-jie-dian-lcof/description/ done(2) - 要求 1. 使用两种方式解题,递归+其他方法,尽最大努力缩减你的代码量。 2. 在完成题目后,继续完成有重复节点的解决方法版本,并编写自己的测试方法测试。 2025-01-31 - 递归计算5!和200!。done(2) - 递归计算斐波那契数列(从0和1开始,后续每一项都是前两项之和),这里截取了包含0在内的前14位数列[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233]。done(2) - 方法1:入参为int类型下标,输出该下标的值。 - 方法2:入参为int类型下标,要求计算出从数列头的值一直累加到int[index],输出为int类型累加的结果。 - 二叉树(BST)型的基本数据结构(增查,删除修改操作等树的遍历算法专题完成后再做)。done(2) # 二零二五二月 2025-02-04 - 使用递归完成树的3种深度优先搜索(DFS)遍历:前序、中序、后序,说明:前序为根->左->右;中序为左->根->右;后序为左->右->根。done(2) - 使用非递归的方式完成树的DFS。done(2) - 完成树的广度优先搜索(BFS)遍历,说明:深度优先为纵向遍历,广度优先为横向遍历也即树的层序。done(2) - leecode: https://leetcode.cn/problems/binary-tree-level-order-traversal/description/ - leecode: https://leetcode.cn/problems/maximum-depth-of-binary-tree/ done(2) - leecode: https://leetcode.cn/problems/binary-tree-right-side-view/description/ done(2) 2025-02-06 - leecode111: https://leetcode.cn/problems/minimum-depth-of-binary-tree/description/ done(2) - leecode101: https://leetcode.cn/problems/symmetric-tree/description/ 要求迭代+递归两种方法解题。done(2) - leecode103: https://leetcode.cn/problems/binary-tree-zigzag-level-order-traversal/description/ done(2)I - leecode515: https://leetcode.cn/problems/find-largest-value-in-each-tree-row/description/ done(2) - leecode429: https://leetcode.cn/problems/n-ary-tree-level-order-traversal/description/ done(2) 2025-02-08 - 二叉树的删除。思考一小时,思考不出可看提示。AES解密,密码tree 密钥U2FsdGVkX1/zPYlUnxOT8CuII+7vF6CRMpBvG8IBeF4KGtDJPJbNDN2sZU4ZhDU4 done(2) - leecode450: https://leetcode.cn/problems/delete-node-in-a-bst/description/ - 顺手完成树的修改。 2025-02-11 - 使用链表完成map集合。done(2) - 使用二叉树完成map集合。done(2) - leecode349: https://leetcode.cn/problems/intersection-of-two-arrays/ done(2) - leecode350: https://leetcode.cn/problems/intersection-of-two-arrays-ii/ done(2) 2025-02-17 - 完成平衡二叉搜索树(AVL Tree),细节较多,难度较大。思考一到两个小时,思考不出可求助搜索引擎,不建议直接查源码实现,看个大致思路自己实现即可。done(2) 2025-02-19 - leecode6:https://leetcode.cn/problems/zigzag-conversion/description/ done(2) 2025-02-21 双指针解法算法合集训练 - leecode704: https://leetcode.cn/problems/binary-search/description/ done(2) - leecode344: https://leetcode.cn/problems/reverse-string/description/ done(2) - leecode167: https://leetcode.cn/problems/two-sum-ii-input-array-is-sorted/description/ done(2) - leecode5: https://leetcode.cn/problems/longest-palindromic-substring/description/ 要求暴力列举子串+双指针两种解法。done(2) 2025-02-22 双指针解法算法合集训练 - leecode83: https://leetcode.cn/problems/remove-duplicates-from-sorted-list/description/ done(2) - leecode283: https://leetcode.cn/problems/move-zeroes/description/ done(2) - leecode26: https://leetcode.cn/problems/remove-duplicates-from-sorted-array/description/ done(2) - leecode27: https://leetcode.cn/problems/remove-element/description/ done(2) # 二零二五三月 2025-03-02 双指针解法算法合集训练 - leecode单链表返回倒数第k个节点:https://leetcode.cn/problems/kth-node-from-end-of-list-lcci/description/ done(2) - leecode19: https://leetcode.cn/problems/remove-nth-node-from-end-of-list/description/ done(2) - leecode876: https://leetcode.cn/problems/middle-of-the-linked-list/description/ done(2) - leecode21: https://leetcode.cn/problems/merge-two-sorted-lists/description/ done(2) 2025-03-03 双指针解法算法合集训练 - 变种 - 滑动窗口(ps. 虽然有反映题太难,我想说不要为了做题而做题,每次做完题按需写下心得。后续还剩一到两个算法会难中加难,按照给出的算法思路例如双指针/滑动窗口,先理解是什么之后再做题。坚持下来,然后没事就从头到尾反复刻意练习本心法+leecode做题,以后看到算法相关心都不带慌的,体会前人留下的算法精髓所在才是题目存在的意义,万万不可本末倒置。) - leecode76: https://leetcode.cn/problems/minimum-window-substring/description/ done(2) - leecode567: https://leetcode.cn/problems/permutation-in-string/description/ done(2) - leecode3: https://leetcode.cn/problems/longest-substring-without-repeating-characters/description/ done(2) 2025-03-04 前缀和解法算法合集训练 - leecode303: https://leetcode.cn/problems/range-sum-query-immutable/description/ done(2) - 不限制解题方式,进阶:用两种方式解题 - leecode724: https://leetcode.cn/problems/find-pivot-index/description/ done(2) # 二零二五四月 前三个月算法练习已经初具解题能力,后续解题 **不允许** 看leecode的题解,部分题会给出提示。 **除非** 已经写出算法并通过,才可以查看时间复杂度更优的题解。 2025-04-02 前缀和解法算法合集训练 - leecode523:https://leetcode.cn/problems/continuous-subarray-sum/description/ done(2) - 涉及到的数学知识:​同余定理(Congruence Theorem) 同余定理是数论中的一个重要概念,用于描述两个整数在除以同一个正整数(模数)时余数相同的关系。它在密码学、计算机科学(如哈希算法)、算法竞赛(如模运算优化)等领域有广泛应用。 ​给定整数 a,b 和正整数 m,如果 a 和 b 除以 m 的余数相同,则称 a 和 b 对模 m 同余,记作:a≡b(modm) 数学表达式:a≡b(modm)⟺m∣(a−b)(即 m 能整除 a−b) - leecode560:https://leetcode.cn/problems/subarray-sum-equals-k/description/ done(2) - leecode1248:https://leetcode.cn/problems/count-number-of-nice-subarrays/description/ done(2) - leecode974:https://leetcode.cn/problems/subarray-sums-divisible-by-k/description/ done(2) topK问题(解决算法 - 堆) - 了解并熟读算法中堆的定义 - 实现二叉树型的堆(效率较慢,仅做理解) done(0) - 实现队列型的堆(优先队列) done(0) - 以上完成后,可以使用语言中自带的优先队列api做题 - leecode215:https://leetcode.cn/problems/kth-largest-element-in-an-array/description/ done(0) - leecode347:https://leetcode.cn/problems/top-k-frequent-elements/description/ done(0) - leecode最小k个数:https://leetcode.cn/problems/smallest-k-lcci/description/ done(0) 单链表1题 - leecode2: https://leetcode.cn/problems/add-two-numbers/description/ done(0) 反转合集(可能有重复题,就当复习,要求:用两种方式解题,其中一种方式必须为递归) - leecode344: https://leetcode.cn/problems/reverse-string/description/ done(0) - leecode206: https://leetcode.cn/problems/reverse-linked-list/description/ done(0) - leecode226: https://leetcode.cn/problems/invert-binary-tree/description/ done(0) 2025-04-10 最后一舞,动态规划(DP) - 查阅资料,了解和思考动态规划是什么,解决了什么问题,不同类型的DP时间复杂度是多少。 - 动态规划属于高阶算法,并不常用,做一些经典简单题大致体会即可,无需深入。初级感兴趣可以尝试使用状态转移方程解题,中高级感兴趣可以做leecode官网DP专题。 - leecode70:https://leetcode.cn/problems/climbing-stairs/description/ done(0) - leecode322:https://leetcode.cn/problems/coin-change/description/ done(0) 至此,主流算法经典题全部完结,其他高阶算法有兴趣可以自己搜索,但是应用的地方很少,后面安排: - 整体复习一遍 - 十大经典排序算法全部实现一遍 - **冒泡排序**(Bubble Sort) - **选择排序**(Selection Sort) - **插入排序**(Insertion Sort) - **希尔排序**(Shell Sort) - **归并排序**(Merge Sort) - **快速排序**(Quick Sort) - **堆排序**(Heap Sort) - **计数排序**(Counting Sort) - **桶排序**(Bucket Sort) - **基数排序**(Radix Sort) - 面试、工作本工程已足够使用。时常拿出来复习即可。 - 如果对算法有浓厚的感兴趣,可以大胆从头开始刷leecode,没错,从第1题开始。养成每周都有做算法题的习惯。 - 持续思考,脑子会越用越活!