算法
文章平均质量分 50
人行花坞
什么事都跟你说的明明白白你就很难成长。
展开
-
图论中的宽度优先搜索如何按给定层数进行?
图论中的宽度优先搜索如何按给定层数进行?06-图3 六度空间 (30 分)代码:#include<iostream>#include<cstring>using namespace std;const int N = 10100,M = 33*N;int n,m;int e[M],ne[M],idx,h[N];bool st[N];void add(int a,int b){ e[idx] = b; ne[idx] = h[a]; h原创 2021-05-15 16:29:06 · 175 阅读 · 0 评论 -
05-树8 File Transfer
05-树8 File Transfer并查集的简单应用We have a network of computers and a list of bi-directional connections. Each of these connections allows a file transfer from one computer to another. Is it possible to send a file from any computer on the network to any oth原创 2021-04-14 15:48:25 · 78 阅读 · 0 评论 -
题解:区间合并
题解:区间合并acwing:区间合并区间合并解题思路: 首先读入所有的区间,然后将区间的左端点从小到大排序,遍历每个区间并且维护一个当前区间,此时会出现两种情况,第一种是遍历到的区间与当前区间完全没有交集,这意味着我们发现了一个新区间,所以此时把旧的区间保存,并将当前区间更新为这个新发现的区间;第二种情况是有交集,此时只需要更新当前维护的区间的右端点,让其变为二者中较大的一个(被遍历到的区间可能会完全在所维护区间的内部)。cpp:#include<iostream>#inc原创 2020-09-23 09:45:20 · 62 阅读 · 0 评论 -
题解:区间和
题解:区间和acwing802:区间和802.区间和假定有一个无限长的数轴,数轴上每个坐标上的数都是 0现在,我们首先进行 n 次操作,每次操作将某一位置 × 上的数加 c。近下来,进行 m 次询问,每个询问包含两个整数和,你需要求出在区间[l,r]之间的所有数的和。输入格式第一行包含两个整数 n 和 m。接下来 n 行,每行包含两个整数 x 和 c。再接下里 m 行,每行包含两个整数和 r.输出格式共 m 行,每行输出一个询问中所求的区间内数字和。离散化解题思路: 这道原创 2020-09-23 09:13:55 · 342 阅读 · 0 评论 -
题解:最长连续不重复子序列
题解:最长连续不重复子序列[原题链接][https://www.acwing.com/activity/content/11/]双指针算法解题思路: 新建一个数组,以每个已知数组的元素大小作为新数组的下标,用来统计每个数字出现的次数,i遍历整个数组,j表示在区间无重复数字的情况下,j向左最远能到达的位置,同时检测这个元素出现的次数,如果这个元素出现的次数大于一,代表当前区间已经有重复数字,需要调整j,使其向右移动,并不断将j途径的元素的记录的数量减一,知道区间无重复数字,同时还要维护一个变量原创 2020-09-23 08:36:53 · 240 阅读 · 0 评论 -
算法:前缀和与差分
算法:前缀和与差分一维前缀和a[N]为一数组,若存在s[N], 使得s[i]=a[1]+a[2]+a[3]+…+a[i], 则称s[N]为a[N]的前缀和数组。前缀和用来求一个数组内给定区间所有元素的和,将其时间复杂度降为O(1).#include <iostream>using namespace std;const int N = 100010;int n, m;int a[N], s[N];int main(){ //ios::sync_with_stdi原创 2020-09-20 07:42:41 · 139 阅读 · 0 评论 -
算法:高精度运算
算法:高精度运算高精度加法 A+BA/B中存放的是大正整数的每一位,并且是倒序存放的 :如:“12345678” =====>[6,5,4,3,2,1]// C = A + Bvector<int> add(vector<int> &A, vector<int> &B){ vector<int> C; int t = 0; //进位标致 for (int i = 0; i < A.size() |原创 2020-09-19 22:27:18 · 81 阅读 · 0 评论 -
题解:第k个数
题解:第k个数第k个数给定一个长度为n的整数数列,以及一个整数k,请用快速选择算法求出数列的第k小的数是多少。输入格式第一行包含两个整数 n 和 k。第二行包含 n 个整数(所有整数均在1~109109范围内),表示整数数列。输出格式输出一个整数,表示数列的第k小数。数据范围1≤n≤1000001≤n≤100000,1≤k≤n输入样例:5 32 4 1 5 3输出样例:3这道题可以用快速排序的思路来解决,如果选定第一个l元素作为基准,快速排序的每次循环会将这个元素排好原创 2020-09-19 22:17:50 · 1189 阅读 · 2 评论 -
二分查找算法
二分查找算法二分查找算法是一个非常常用的算法,也能解决很多问题,只要在一个区间内存在一个元素,使得这个数的左边满足某种性质,但是右边不满足这个性质,就可以用二分查找算法找出这个元素。整数的二分查找整数的二分查找会产生很多的边界问题bool check(int);int bsearch_1(int l, int r){ while (l < r) { int mid = l + r >> 1; if (check(mid))原创 2020-09-19 21:54:02 · 151 阅读 · 0 评论 -
排序算法:快速排序和归并排序
排序算法:快速排序和归并排序快速排序和归并排序是排序算法里十分常用的两个排序,二者的代码复杂度差不多,并且都应用了分治法的思想。复杂度排序算法平均时间复杂度最坏时间复杂度最好时间复杂度空间复杂度稳定性快速排序O(nlogn)O(n²)O(nlogn)O(1)不稳定归并排序O(nlogn)O(nlogn)O(nlogn)O(n)稳定快速排序快速排序简称快排,思想是首先选定要排序的那组数的一个元素作为基准,可以是第一个元素,最后一个元素,或原创 2020-09-19 20:44:02 · 277 阅读 · 0 评论