
算法整理
算法知识点的整理笔记
andream7
这个作者很懒,什么都没留下…
展开
-
递归基础
递归实现冒泡排序void bubble(int arr[], int L, int R){ if(L < R) { for(int i = L; i <= R-1;i++) { if(arr[i] > arr[i+1]) { int temp = arr[i]; arr[i] = arr[i+1]; arr[i+1] = temp; } } bubble(arr, L, R-1); }}辗转相除法求最大公约数in原创 2020-06-12 14:37:09 · 139 阅读 · 0 评论 -
并查集
在近乎O(1)的时间复杂度下支持两个操作:将两个集合合并询问两个元素是否在一个集合中基本原理:每个集合用一棵树维护,根节点的编号是整个集合的编号,对于每一个点都存储父节点,p[x]表示父节点,若想确定某个点属于哪一个集合,就先确定这个点的父节点,知道找到树根位置,根节点编号即数组编号。如何判断树根: p[x] = x如何求x的集合编号while(p[x] != x) x = p[x];如何合并两个集合:若px是x的集合编号,py是y的集合编号,p[x] = py;相当于把x原创 2020-06-11 18:07:05 · 123 阅读 · 0 评论 -
数组模拟单链表&双链表(静态链表)
单链表:邻接表(邻接表主要用于存储图和树,如最短路,最小生成树,最大流)双链表:优化用数组模拟单链表,首先需要定义表示val的数组e[N],表示某个点的next指针值的数组ne[N],e和ne之间用相同的下标关联,idx存储当前用到了哪个地址(相当于开始指向第一个结点的指针,每次把idx指向的结点分配出去之后,idx向后移动一位),head指向头结点。初始化void init(){ head = -1; idx = 0;}把新结点x插到头结点的位置把x的指针指向当前的头结点.原创 2020-06-11 17:22:03 · 218 阅读 · 0 评论 -
【基础编程技巧题】HDOJ1735-字数统计
题目大意算法分析所求目标:被破坏的最小文字。因为段落数已知,所以每段开头的两个空格的总数可以计算(段落数2),最后一段最后一行的空格也是确定的。count 记录所有的0的个数。一共m段,则段首一共有2m个未被污染的格子,最后一行一定是段尾,所以0的个数 count - =2*m,count -=最后一行0的个数num。问题转化为:求每一段中,最后一行空格之和的最小值。方法:遍历,...原创 2020-02-08 20:40:06 · 216 阅读 · 0 评论 -
【基础编程技巧题】HDOJ1056-HangOver
算法分析程序代码#include <stdio.h>int main(){ double c; while(scanf("%lf", &c) && c) { int i = 2; double s = 0; while (s<c){ s = s + 1.00 / i; i++; } printf("%d c...原创 2020-02-08 13:19:14 · 396 阅读 · 0 评论