
算法
每天一道题
不积跬步,无以至千里
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
算法竞赛常用STL库
蓝桥天梯常用STL库,vector,set,map,queue,stack原创 2023-03-24 20:15:43 · 1125 阅读 · 14 评论 -
整数二分(模板)
算法介绍对于寻找数字时,每次找区间的中间值,然后判断与要寻找的数字比大小,唯一一个难点是需要确定中点。确定中点时,有时候是mid = left + right >> 1,而有时候确是mid = left + right + 1 >> 1。所以我们接下来介绍什么时候用第一个,什么时候用第二个。模板区间被划分成[l, mid]和[mid + 1, r]时:int bsearch_1(int l, int r){ while (l < r) {原创 2022-05-01 17:09:10 · 145 阅读 · 1 评论 -
归并排序(模板)
算法介绍主要为分治的思想。1.确定分界点mid = (left + right)/ 2。2.递归排序left,right。3.合二为一。下面来着重介绍如何合二为一:首先有两个已经排好序的序列,并且有两个指针分别指在他们的开始的地方。1.比较这两个指针哪个数字比较大。2.取出较大的那个数字存在temp数组中,并将这个指针往后移动一位。3.继续重复第二步的操作,直到某一个序列的指针已经走到尾部。4.判断两个序列指针是否已经全部到达尾部,若其中有一个未到达,则依次将这个指针后面的数字存入tem原创 2022-04-30 17:00:16 · 288 阅读 · 0 评论 -
快速排序(模板)
思路快速排序就是分治的一个过程,分三步进行:1.确定分界点,可以是第一个数,最后一个数,或者中间值。2.调整范围,使得左半边的数都小于x,右半边的数都大于x。3.递归处理左右两端。模板void quick_sort(int f[],int l,int r){ if (l >= r) return; int i = l - 1, j = r + 1, x = f[l + r >> 1]; while (i < j){原创 2022-04-24 20:41:23 · 149 阅读 · 0 评论 -
spfa算法
算法介绍本文不介绍算法原理,只告诉怎么用和模板。解决最短路问题,图中可以存在重边和自环,更重要的是可以解决负权回路,这是dijkstra算法不能做的。这个算法就是用一个队列去维护,队列中放的点都是已经被更新过的点,如果他没有被更新就不能放进去,以此类推,直到队列中没点才行。题目给定一个 n 个点 m 条边的有向图,图中可能存在重边和自环, 边权可能为负数。请你求出 1 号点到 n 号点的最短距离,如果无法从 1 号点走到 n 号点,则输出 impossible。数据保证不存在负权回路。输入格式原创 2022-04-22 21:08:28 · 361 阅读 · 0 评论 -
dijkstra算法
算法介绍解决最短路问题,可存在重边和自环,但是不能存在负权边。本文只介绍了dijkstra算法的使用,不介绍算法的证明。题目给定一个 n 个点 m 条边的有向图,图中可能存在重边和自环,所有边权均为正值。请你求出 1 号点到 n 号点的最短距离,如果无法从 1 号点走到 n 号点,则输出 −1。输入格式第一行包含整数 n 和 m。接下来 m 行每行包含三个整数 x,y,z,表示存在一条从点 x 到点 y 的有向边,边长为 z。输出格式输出一个整数,表示 1 号点到 n 号点的最短距离。如原创 2022-04-21 19:28:19 · 340 阅读 · 0 评论