# tec-learn **Repository Path**: tec-cloud/tec-learn ## Basic Information - **Project Name**: tec-learn - **Description**: tec-learn学习仓库 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2022-05-02 - **Last Updated**: 2023-06-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 仅保留算法代码 ## 算法与数据结构 - [x] 选择排序 - [x] 冒泡排序 - [x] 插入排序 - [x] 在一个有序数组中,找某个数是否存在 - [x] 在一个有序数组中,找大于等于某个数最左侧的位置 - [x] 在一个有序数组中,找小于等于某个数最右侧的位置 - [x] 局部最小值问题 - [x] 如何不用额外变量交换两个数 - [x] 一个数组中出现了奇数次的数 - [x] 提取整型数最右侧的1 - [x] 一个数组中出现奇数次的两个数 - [x] 一个数组中有一种数出现K次,其他数都出现了M次 - [x] 单链表和双链表如何反转 - [x] 把链表中的给定值都删除 - [x] 双向链表实现栈和队列 - [ ] 数组实现栈 - [ ] 环形数组实现队列 - [x] 含有getMin方法的栈 - [ ] 如何用栈结构实现队列结构 - [ ] 如何用队列结构实现栈结构 - [ ] 用递归方法求数组中的最大值 - [ ] 求数组小和 ``` 第1节 复杂度和二分法 认识时间复杂度 选择排序 冒泡排序 插入排序 三种排序复杂度分析来强化时间复杂度认识 额外空间复杂度 常数时间的估算方式 认识对数器 二分法及其扩展题目 有序数组中找到>=num最左的位置 有序数组中找到<=num最右的位置 局部最小值问题 第2节 异或运算相关面试题 认识异或运算及其性质 如何不用额外变量交换两个数 一个数组中有一种数出现了奇数次,其他数都出现了偶数次,怎么找到这种数 怎么把一个int类型的数,提取出最右侧的1来 一个数组中有两种数出现了奇数次,其他数都出现了偶数次,怎么找到这两种数 一个数组中有一种数出现K次,其他数都出现了M次,M > 1, K < M。找到出现了K次的数,要求,额外空间复杂度O(1),时间复杂度O(N) 第3节 基础数据结构 反转单双链表 删除单链表的给定值问题 双向链表实现栈和队列 数组实现栈 环形数组实现队列 含有getMin方法的栈 如何用栈实现队列 如何用队列实现栈 递归在系统上的实现 递归的脑图分析方式 递归的时间复杂度分析(Master公式) 哈希表的使用 有序表的使用 第4节 归并排序 归并排序的递归实现 归并排序的非递归实现 用归并排序解决数组小和问题 用归并排序解决数组逆序对问题 用归并排序解决在数组中左数>2*右数的个数问题 第5节 归并排序附加题、随机快速排序 用归并排序解决leetcode的count of range sum问题 快排的partition过程 荷兰国旗问题 随机快排的递归实现 随机快排的非递归实现 第6节 堆和堆排序 比较器的用法 堆结构的实现 堆排序 堆排序时间复杂度分析 从顶向下建堆 VS 从底向上建堆 对每个元素排序后移动的距离一定不超过k的数组进行排序 第7节 加强堆 最大线段重合问题 利用反向索引表实现功能更强大的堆(加强堆) 电商抽奖问题(加强堆练习题) 第8节 前缀树、不基于比较的排序、排序稳定性 前缀树的实现 基于比较的排序 VS 不基于比较的排序 计数排序的实现 基数排序的实现 排序算法的稳定性 第9节 排序总结、链表相关面试题 排序算法大总结 学习排序算法中常见的坑 工程上对排序改进的常见方向 链表问题在笔试上和面试上的解题方法论 链表问题常见的解题技巧 判断链表是否是回文结构 将单向链表按某值划分成左边小、中间相等、右边大的形式 克隆带有随机指针的链表 链表相交的一系列问题 第10节 二叉树基本算法(上) 二叉树的三种序 证明X节点的祖先节点是两个集合的交集 二叉树的递归遍历 二叉树的非递归遍历 实现二叉树的按层遍历 二叉树的序列化和反序列化 leetcode的Encode N-ary Tree to Binary Tree问题 第11节 二叉树基本算法(下) 如何设计一个打印整棵树的打印函数 求二叉树最宽的层有多少个节点 返回X节点的后继节点 判断二叉树是否是搜索二叉树 判断二叉树是否是完全二叉树 折纸问题 第12节 二叉树的递归套路 判断是不是平衡二叉树 判断是不是满二叉树 判断是不是搜索二叉树 二叉树中最大的二叉搜索子树的大小 二叉树中最大的二叉搜索子树的头节点 给定一棵二叉树的头节点head,和另外两个节点a和b,返回a和b的最低公共祖先 二叉树的最大距离 派对的最大快乐值 第13节 贪心算法(上) 贪心算法介绍和证明 拼接字典序最小的字符串问题 用对数器破解贪心算法题目 第14节 贪心算法(下) 街道点灯问题 分金条问题 会议室最大使用问题 leetcode的IPO问题 第15节 并查集及其相关题目 并查集讲解和实现 并查集应用:岛问题 第16节 图 图的数据结构 图的bfs 图的dfs 拓扑排序 Kruskal算法 Prim算法 Dijkstra算法 第17节~第22节 从暴力尝试到动态规划系列大课 打印n层汉诺塔从最左边移动到最右边的全部过程 打印一个字符串的全部子序列 打印一个字符串的全部子序列,要求不要出现重复字面值的子序列 打印一个字符串的全部排列 打印一个字符串的全部排列,要求不要出现重复的排列 不申请额外结构只用递归函数逆序一个栈 数字串转化为字符串问题 背包问题 纸牌问题 N皇后问题 机器人行进问题的动态规划 一系列类似背包问题的动态规划 纸牌游戏问题动态规划 数字串转化为字符串问题动态规划 最长公共子序列问题动态规划 贴纸分解问题动态规划 泡咖啡问题动态规划 象棋走马问题动态规划 最短路径和问题动态规划 找零方法数问题动态规划 第22节 窗口更新结构和单调栈结构 窗口内最大值和最小值的更新结构 滑动窗口最大值问题 满足条件的子数组问题 单调栈结构 正数数组中子数组累加和乘最小值尽量大问题 第23节 由斐波那契数列讲述矩阵快速幂技巧 斐波那契数列 上楼梯问题 生母牛问题 01字符串满足条件个数问题 第24节 bfprt算法、蓄水池算法 改写快速排序找到数组最小的第K个数 bfprt算法 蓄水池算法 第25节 KMP算法 KMP算法 包含子树问题 互为旋转词问题 第26节 Manacher算法 Manacher算法 结尾添加最少字符让整体成为回文串 第27节 Morris遍历 Morris遍历原理和实现 求二叉树的最小高度额外空间复杂度O(1)的实现 第28节 线段树 线段树讲解和实现 俄罗斯方块每次掉落最大高度问题 第29节 IndexTree IndexTree 二维IndexTree 第30节 AC自动机 AC自动机的原理和实现 第31节 利用对数器找规律、打表技巧在面试中的应用 买苹果的最少袋子问题 牛羊吃草问题 连续数字累和能否凑足sum 第32节 矩形coding题目的宏观调度技巧 旋转正方形矩阵问题 旋转打印矩阵问题 打印星号图像问题 zigzag打印矩阵问题 第33节 子数组达到规定累加和的最大长度系列问题(数组三连) 正数数组的得到累加和为sum的最大子数组长度 一般数组的得到累加和为sum的最大子数组长度 一般数组的得到累加和为<=sum的最大子数组长度 第34~36节 有序表(上、中、下) 有序表的原理 平衡搜索二叉树 平衡搜索二叉树的右旋和左旋 AVL树的原理和实现 SB树的原理和实现 跳表的原理和实现 红黑树 leetcode的count of range sum用有序表的解法 滑动窗口中位数的有序表解法 设计一个set(index, value)和get(index)都很快的结构 有序表总结 第37节 卡特兰数 N个节点的二叉树结构数问题 要求任意前缀串中1比0多的字符串数量问题 得到N个节点的所有不同的二叉树结构 第38节 区间划分中的不回退现象 牛牛分田地问题 第39节 ~ 第40节 四边形不等式技巧(上、下) 邮局问题 画家问题 扔蛋问题 第41节 ~ 第42节 状态压缩的动态规划(上、下) Leetcode CanIWin问题 TSP问题 贴瓷砖问题 第43节 后缀数组 后缀数组讲解和实现 leetcode的CreateMaxinumNumber问题 第44节~第45节 动态规划猜法中和外部信息简化的相关问题(上、下) 打气球问题(Burst Balloons) 消箱子问题(Remove Boxes) 打印机最小转数问题(Strange Printer) 恢复原序列的方法数(Restore Ways) 相邻字符最大消除问题(Delete Adjacent Same Character) ```