
算法基础
文章平均质量分 62
thginWalker
先了解世界,再隐秘其中!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
前缀和 & HASH
看了答案处理负数,直接加个k。原创 2025-07-18 20:28:37 · 206 阅读 · 0 评论 -
常见算法刷题汇总
总结算法刷题的一些模板和刷题规律。原创 2024-07-03 14:24:34 · 283 阅读 · 1 评论 -
经典算法系列汇总
前言由于考研复试的需要,准备了一系列的经典算法例题。想在空闲的时间内进行整体和验证,特此汇总。方便日后查看。递归算法全排序整数划分递归判断回文串迭代算法辗转相除法(欧几里德算法)斐波那契数列搜索算法顺序查找折半查找分块查找B-树B+树散列查找排序算法直接插入排序折半插入排序希尔排序冒泡排序快速排序简单选择排序堆排序归并排序基数排序...原创 2019-04-21 21:04:22 · 47 阅读 · 0 评论 -
图论经典算法
遍历:系统地访问图中的所有顶点,这是绝大多数图算法的基础。BFSDFS贪心算法:在每一步选择中都采取当前状态下最好或最优(即最有利)的选择,从而希望导致结果是全局最好或最优的。许多最小生成树和最短路径算法都基于此思想。动态规划:将复杂问题分解为更小的子问题,并存储子问题的解以避免重复计算。用于解决所有节点对之间的最短路径等问题。松弛操作:这是最短路径算法(如Dijkstra和Bellman-Ford)的核心操作。它通过不断更新和优化当前已知的从源点到某个顶点的最短距离估计值,最终得到真实的最短距离。原创 2025-08-25 09:48:23 · 190 阅读 · 0 评论 -
平衡二叉树(AVL树)及代码实现
前言学习AVL很久了,但是之前一般都是画草图,这次结合code资料进行实现。冲突解决注:不适合无基础的伙伴查看。在AVL树失去平衡后进行调整的规律只要分为四种情况。分别是LL型平衡旋转、RR型平衡旋转、LR型平衡旋转和RL型平衡旋转。LL型平衡旋转由于在aaa的左子树上插入结点,使aaa的平衡因子由a增至2而失去平衡,需要进行一次顺时针旋转操作。b = a->left; //找到b节点:a的左子树的跟a->left = b->right; //把b的右子树作为a的左原创 2021-07-08 13:59:20 · 20 阅读 · 0 评论 -
二叉搜索树(BST)及代码实现
二叉搜索树(BST)通常不允许存在相同节点,以保持其排序特性和高效查找,插入和删除等操作的正确性。如果遇到相同节点,插入操作通常会直接返回,而不进行插入,以避免重复数据。二叉搜索树也成二叉排序树,原创 2025-08-20 09:57:08 · 303 阅读 · 0 评论 -
红黑树(RBTree)及代码实现
红黑树及代码实现。原创 2025-08-19 22:26:59 · 760 阅读 · 0 评论 -
单调队列.
239. 滑动窗口最大值。原创 2025-08-15 19:11:14 · 127 阅读 · 0 评论 -
Java刷leetcode技巧及总结,持续更新
刷leetcode有时候一些细小功能总是查了又忘,忘了又查,还不如总结加以刻意练习来达到掌握的效果。原创 2025-08-14 09:52:11 · 318 阅读 · 0 评论 -
python刷leetcode技巧及总结
对于leetcode里面的一些优秀代码的阅读,有利于学习新的知识点,这篇文章是为了进行总结学习和方便查询的。另外,在python刷leetcode中,不需要单独引用包,直接使用就行。原创 2022-08-23 00:33:11 · 807 阅读 · 0 评论 -
JAVA工程师必备技能——算法基础
fill:#333;color:#333;color:#333;fill:none;算法基础单调栈并查集滑动窗口&双指针前缀和&差分拓扑排序字符串二分查找BFS&DFS贪心算法动态规划字典树非算法思想。原创 2025-07-26 12:58:11 · 485 阅读 · 0 评论 -
DFS算法
dfs模板原创 2022-11-26 11:57:01 · 11 阅读 · 0 评论 -
BFS算法
主要记录自己的bfs模板和刷题记录原创 2022-11-26 09:46:56 · 13 阅读 · 0 评论 -
二分查找算法(未更新完)
原创 2025-07-18 20:44:49 · 211 阅读 · 0 评论 -
/字符串/
本文整理了字符串相关算法题的解题思路,包括最长回文子串的动态规划解法、复原IP地址的回溯算法、字符串相乘的模拟乘法过程以及基本计算器II的栈实现方法。这些题目涵盖了字符串处理中的常见算法技巧,适合面试和算法练习使用。原创 2025-07-18 20:42:57 · 219 阅读 · 0 评论 -
拓扑排序/
解决拓扑排序问题:1、 根据依赖关系,构建邻接表、和入度数组2、选取入度为 0 的数据,根据邻接表,减小依赖它的数据的入度3、找出新入度为 0 的数据,重复第 2 步4、直至所有数据的入度为 0,得到排序,如果还有数据的入度没有变到 0,说明存在环形依赖和 传统BFS 不一样的地方:传统BFS:把出列节点的下一层子节点推入 queue,不加甄别拓扑排序:实施甄别和监控,新入度为 0 的先推入 queue。原创 2025-07-18 20:41:19 · 270 阅读 · 0 评论 -
/字典树/
你打算和 K 名朋友一起分享这块巧克力,所以你需要将切割 K 次才能得到 K+1 块,每一块都由一些 连续 的小块组成。你有一大块巧克力,它由一些甜度不完全相同的小块组成。我们用数组 sweetness 来表示每一小块的甜度。请找出一个最佳的切割策略,使得你所分得的巧克力 总甜度最大,并返回这个 最大总甜度。为了表现出你的慷慨,你将会吃掉 总甜度最小 的一块,并将其余几块分给你的朋友们。原创 2025-07-18 20:39:37 · 195 阅读 · 0 评论 -
动态规划/
动态规划相关原创 2022-11-26 11:48:16 · 13 阅读 · 0 评论 -
/贪心算法.
你打算和 K 名朋友一起分享这块巧克力,所以你需要将切割 K 次才能得到 K+1 块,每一块都由一些 连续 的小块组成。你有一大块巧克力,它由一些甜度不完全相同的小块组成。我们用数组 sweetness 来表示每一小块的甜度。请找出一个最佳的切割策略,使得你所分得的巧克力 总甜度最大,并返回这个 最大总甜度。为了表现出你的慷慨,你将会吃掉 总甜度最小 的一块,并将其余几块分给你的朋友们。原创 2025-07-18 20:37:39 · 194 阅读 · 0 评论 -
差分数组算法
给定一个会议时间安排的数组,每个会议时间都会包括开始和结束的时间。, 为避免会议冲突,同时要考虑充分利用会议室资源,请你计算。多少间会议室,才能满足这些会议安排。原创 2025-07-18 20:32:56 · 620 阅读 · 0 评论 -
扫描线
扫描线原创 2022-12-09 17:42:50 · 137 阅读 · 0 评论 -
滑动窗口/
给出一个二进制数组 data,你需要通过交换位置,将数组中 任何位置 上的 1 组合到一起,并返回所有可能中所需 最少的交换次数。经过与官方的一些讨论,目前将计算过程仅与「两端点」相关的称为「双指针」,将计算过程与「两端点表示的区间」相关的称为「滑动窗口」。「滑动窗口」是一类问题本身,「双指针」是解决一类二分查找问题的通用优化方法。给一个字符串 s 和整数 k , 要求返回最多由k个不同字符组成的最长子串。字符的子串,请你返回全部满足要求的子串的。的最长子串 t ,并返回该子串的长度。原创 2022-10-16 21:33:01 · 12 阅读 · 0 评论 -
并查集二/
例如,当相似单词对是 pairs = [[“great”, “fine”], [“acting”,“drama”], [“skills”,“talent”]]的时候,words1 = [“great”, “acting”, “skills”] 和 words2 = [“fine”, “drama”, “talent”] 是相似的。例如,如果 “great” 和 “fine” 是相似的,“fine” 和 “good” 是相似的,则 “great” 和 “good” 是相似的。原创 2022-10-12 23:51:30 · 5 阅读 · 0 评论 -
/单调栈/
单调栈原创 2022-10-12 23:51:00 · 177 阅读 · 0 评论 -
运用位运算的相关总结
前言在刷leetcode的时候为了提高效率,很多操作可以使用位运算来进行优化,此文用于收集并总结位运算的相关操作。位运算基础知识可见:传送门。内容位运算实现四则运算-python版这个太硬核了,看看就行,要是写代码这样那就太夸张了Fight!!(o-)~’'☆ミ☆ミ乘以2操作常规代码:b = a * 2;位运算代码:b = a << 1;乘以2并加1操作常规代码:b = a * 2 + 1;位运算代码:b = a << 1 | 1;资料位运算表原创 2020-11-06 17:31:22 · 389 阅读 · 0 评论 -
1□2□3□4□5□6□7□8□9=110
回溯法+栈运算符优先级题目代码运行总结题目1□2□3□4□5□6□7□8□9=110要求在中间的8个空中填写+,-,或不填。构成的表达式判断是不是正确,正确则输出。。。。(如果空格的中没有填写符号,则这几个数组成一个新的N位数,比如1□2,可以是1+2,也可以是12)代码#include<iostream>#include<stack> #include&l...原创 2019-03-22 14:41:50 · 2628 阅读 · 0 评论 -
整数划分
思想整数划分,是指把一个正整数n表示成系列正整数之和:例如正整数6有如下11种不同的划分,所有p(6)=1165+14+2,4+1+13+3,3+2+1,3+1+1+12+2+2,2+2+1+1,2+1+1+1+11+1+1+1+1+1我们假设函数f(n,m):n为要整数划分的数,m为划分中出现的最大加数然后可以推出递归关系(反正我是推不出,只能理解了 (●—●))①f(...原创 2019-04-22 08:37:43 · 14941 阅读 · 7 评论 -
全排序
思想整数划分,是指把一个正整数n表示成系列正整数之和:例如正整数6有如下11种不同的划分,所有p(6)=11代码#include<iostream>using namespace std;void Perm(int list[],int k,int m){ if(k == m){ for(int i = 0;i <= m;i++) printf("%d...原创 2019-04-22 14:08:40 · 643 阅读 · 0 评论 -
辗转相除法(欧几里德算法)
思想这是经典的迭代算法,用于计算两个整数a,b的最大公约数。其实对于原理我个人也不太懂。原理代码#include<iostream>using namespace std;int gcd(int a,int b){ int temp; if(a < 0 || b < 0) return 0; //b总是表示较小的那个数,若不是则交换a,b的值 ...转载 2019-04-22 17:52:32 · 579 阅读 · 0 评论 -
斐波那契数列
思想说起斐波那契数列,相比学过计算机和数学的都肯定了解过。之前大家一般都是用递归写,时间复杂度为O(2n)O(2^{n})O(2n),效率低下。要是用一维数组存储已经计算的则时间复杂度为O(n),空间复杂度为O(n),感觉还算不错。而迭代的写法能在此基础上将空间复杂度将至O(1)。代码#include<iostream>using namespace std;int fib...转载 2019-04-22 18:15:42 · 250 阅读 · 0 评论 -
矩阵连乘积
题目m×\times×n矩阵A与n×\times×p矩阵B相乘需消耗O(mnp)的时间。我们把mnp作为两个矩阵用来相乘所需时间的测量值。在多个矩阵连乘的情况下,不同矩阵之间的计算顺序不同结果虽然相同,但总共所需要的乘法数量不同。例子:A === (256143)\bigl(\begin{matrix} 2 & 5 & 6\\ 1 & 4...转载 2019-05-05 19:44:38 · 1039 阅读 · 0 评论 -
最长公共子序列
题目最长公共子序列问题是在序列X和Y的公共子序列中查找长度最长的公共子序列,而最长公共子序列往往不止一个。例如:X=(A,B,C,B,D,A,B),Y=(B,D,C,A,B,A),则Z=(B,C,B,A),Z1=(B,C,A,B),Z2=(B,D,A,B),均属于LCS(X,Y),即X,Y的最长公共子序列有3个。X= (A,B,C,B,D,A,B),Y = (B,D,C,A,B,A),则Z =...转载 2019-05-06 10:31:17 · 342 阅读 · 0 评论 -
最大字段和
题目给定由n个整数(可能有负数)组成的序列a1,a2,...,an,要在这n个数中选取相邻的一段ai,ai+1,...,aj(1≤i≤j≤n),使其和最大,输出最大的和。当所有整数均为负整数时,定义最大字段和为0。a_1,a_2,...,a_n,要在这n个数中选取相邻的一段a_i,a_{i+1},...,aj(1\leq i \leq j \leq n),使其和最大,输出最大的和。当所有整数均为...转载 2019-05-06 11:35:31 · 916 阅读 · 0 评论