
算法
Stu古月月仔
计算机在校生&游戏程序员
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
算法-BFS搜索
每次的节点寻找其上下左右四个方向可以继续前进的点(这里在过程中会发生两个点循环的情况,不过不影响结果,有兴趣可以优化一下)。终点判断为(n-1,m-1),因为我的遍历是从(0,0)点开始的。函数判断每次寻找的上下左右四个坐标是否合规。表示在遍历过程中当前距离的所以节点坐标。比较标准的暴力搜索+空间换时间的策略。表示遍历过程中某点到起点的距离。原创 2024-07-26 21:01:56 · 208 阅读 · 0 评论 -
算法-DFS搜索
如图示采样,“ \ ”方向的对角线横标和纵标之差值保持一致,“ / ”方向对角线横标和纵标之和值保持一致。故代码中使用布尔数组来表示某一对角线的情况,r-i+n取正。第r行,第i列能不能放棋子:用数组dg udg cor 分别表示:点对应的两个斜线以及列上是否有皇后。cor[i]表示第i列上有没有棋子。如果 r行i列的对角线,反对角线上都没有棋子。udg[n - i + r]表示 r行i列处,所在的反对角线上有没有棋子。dg[i + r] 表示 r行i列处,所在的对角线上有没有棋子。原创 2024-07-23 22:22:24 · 310 阅读 · 0 评论 -
算法-Tire树
总体思路为将待求数二进制形式存储在Tire树中,通过树型数据结构快速求取某数的最佳匹配值,最后求与运算。重在理解tire树的物理结构和逻辑结构。index相当于一个分配器,只有需要插入新结点时才会增加。ps:不是放在这章里真的一点想不到这个方法。为什么son取M=N*31。原创 2023-08-27 21:26:57 · 130 阅读 · 0 评论 -
算法-KMP字符串匹配
next[i] 就是使子串 s[0…i] 有最长相等前后缀的前缀的最后一位的下标。总体来说解next数组和模板串匹配的过程很相似,触类旁通。原创 2024-07-23 22:06:37 · 416 阅读 · 0 评论 -
算法-堆排序
因为建小堆可以选出最小的数即根节点,我们将每次建好的小堆的最后一个叶子节点和根节点进行交换,交换后不把最后一个数看作堆里的数据,此时根的左右子树依旧是大堆,然后我们再用向下调整算法选出次小的如此循环直到堆里剩一个数结束。down操作中,u负责存储原数,比较时要以用u为准,t在比较过程中可能被修改。堆的物理结构为数组,实现时为了方便计算,从下标1开始存储。原创 2023-08-14 19:35:18 · 138 阅读 · 0 评论 -
算法设计与分析-斐波那契数列
原创 2023-05-05 20:27:15 · 107 阅读 · 0 评论 -
算法-单调队列
找最小值:建立单调队列,并保持队列长度小于等于设定的K值,每次读入新值时,如果新值大于队尾值则再保证队列长度的情况下往队尾插值,如果新值小于队尾值,则队尾退至最小于新值的合法位置(地址大于等于队头)。用队列模拟窗口,在窗口中暴力搜索最小值/最大值,时间复杂度为O(n^2)初始值r=-1的原因首次写入时单调队列下标为0,统一规范。代码实现注意点:在窗口容满时才开始输出,r- -和r++书写为队列规范。原创 2023-08-11 20:19:35 · 116 阅读 · 0 评论 -
算法-单调栈
用单调递增栈,当该元素可以入栈的时候,栈顶元素就是它左侧第一个比它小的元素。注意此处使用的单调栈从下标为1开始存储,栈顶为0说明当前栈为空。原创 2023-08-11 12:09:04 · 81 阅读 · 0 评论 -
算法-链表
不使用结构体&指针链表的原因:new函数效率很低,在输入大量数据时会导致超时。使用index 0和1 作为双链表的两端点,读入参数的index初始值为2。注意双链表不仅要更改左值,还要更改另一个方向的值。add函数利用双链表的特性简化为传参实现不同功能。故使用两个数组模拟链表在内存中的运行逻辑。其余用数组模拟指针地址来模拟链表。原创 2023-08-10 20:06:36 · 70 阅读 · 0 评论 -
算法-ACwing788-逆序对数量
利用归并排序,在归并时算得逆序对数量。原创 2023-07-19 12:44:11 · 123 阅读 · 0 评论 -
算法-整数二分
此处不令r=mid-1的原因:如过按照上一个二分的写法,循环判断条件还是l原创 2023-07-20 16:31:04 · 77 阅读 · 0 评论 -
算法-浮点数二分
解题思路:利用二分查找,注意点为若想提高精确度,可将初始区间选择为max(1,x)原创 2023-07-20 17:08:18 · 89 阅读 · 0 评论 -
算法-高精度
将超长整数倒序放入vector(利于进位变换),模拟人手算,创建一个坑整数,用于存储每次两数相同位相加后的结果,小于10的部分放在当前位,大于10取余加到上一位。数存储方式与上题相同,t作为工具变量存储借位,(t+10)%10借位补算和补算纠错,而t本身存储的负值不变,循环结束后使用while循环去除前导0;代码实现时要注意的是,所得的vector C为解的反vector 需要对其reverse ,然后去解的前导零。长整数的每位分别与短数相乘,大于十的部分进位,小于十的部分留下。原创 2023-07-24 10:33:10 · 86 阅读 · 0 评论 -
算法-前缀和
全部和:S【i】【j】=S【i-1】【j】+S【i】【j-1】-S【i-1】【j-1】+a【i】【j】空间换时间,添加一个前N项和的数组。将S0设为0,便于之后统一公式。原创 2023-08-07 11:31:33 · 80 阅读 · 0 评论 -
算法-差分
前缀和的逆运算,总体思路为使An做Bn的前缀和。原创 2023-08-07 18:15:30 · 72 阅读 · 0 评论 -
算法-双指针
依然是空间换时间,设立一个temp数组用于存储在当前最大序列种每个元素的个数,当检查到新加入元素在当前最大子序列中的个数(temp[a[i]])大于1时,将 j向右移动至重复元素之右。则B[j+1]到B[m]不可能与当前A[i]匹配。原创 2023-08-08 11:59:50 · 96 阅读 · 0 评论 -
算法-区间和
注意点:代码中对容器进行排序去重操作是针对查询坐标的重复,而非数轴上加减法的操作。利用前缀和算法改进后可通过检测。原创 2023-08-09 18:53:28 · 92 阅读 · 0 评论 -
算法-1-排序
3、递归处理左右两边。2.递归排序left,right。原创 2023-07-17 20:51:06 · 84 阅读 · 1 评论 -
算法-区间合并
注意add读完后要将最后一组st,ed存入res。原创 2023-08-10 11:51:44 · 90 阅读 · 0 评论