![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法笔记
minjiex
这个作者很懒,什么都没留下…
展开
-
全排列 公式&手动实现
全排列 公式&手动实现 #include perv_permutation(12345); 返回值false;把数组变为54321; next_permutation(54321); 返回值false;把数组变为12345; a[] = {1,2,3,4,5}; do{ for(int i = 0; i < 5; i++) cout << a[i];原创 2018-01-30 00:32:33 · 1958 阅读 · 0 评论 -
高精度加法和乘法
高精度加法和乘法 加法(只支持自然数的大整数相加) 1.通过模拟加法算式,从右往左依次累加,如果两个不一样长,要在短的前面用0补上。 2.取余保留,除10进位,注意最后一位如果有进位要把进位加上去。 乘法(只支持自然数的大整数相乘) 1. 通过模拟乘法算式,从右往左数的话,s1[i] * s2[j] 贡献给了ans[i+j]。 2.所以为了方便从右往左数, 先把s1,s2翻转,且乘法后的结果...原创 2018-10-27 23:52:13 · 310 阅读 · 0 评论 -
双向队列 deque 和 list
双向队列 deque 和 list 效率l介于ist和vector之间,支持随机访问(比vector效率低,比list高),支持两端插入删除(效率比list低,比vctor高) 内部分块存储,结构比较复杂,不做深究 1、需要高效的随即存取,不关心插入和删除的效率,用vector 2、大量的插入和删除,不关心随即存取,用list 3、既需要随即存取,又要两端数据的插入和删除,用deque。 双向队列...原创 2018-10-22 19:17:11 · 459 阅读 · 0 评论 -
优先队列使用
优先队列详解和使用 1.优先队列和普通队列相似,但是出队按照优先级高的先出对,进队和出队时间复杂度都为O(log2n)。 2.因为内部原理是用堆实现,插入时候把堆调整(花费o(log2n)),删除时直接删除堆顶(O(1)),然后把剩下元素调整(O(long2 n))。把一个原始无序集合,通过完全二叉树够造成堆花费O(nlog2n)。 3.(1).适用于动态添加和删除时,实时维护最值。(2).也可用...原创 2018-10-19 23:28:09 · 361 阅读 · 2 评论 -
Bellman-Ford佛洛依德算法 负权值 最短路 模版
1.n个点,m条边,含有负边。 1.外层循环n-1次,内层循环m次,进行松弛 3.添加check变量判断本轮是否进行松弛了,如果未进行松弛则可以提前退出循环 4.处理有向边时,注意u[i]和v[i]的顺序不要颠倒 #include <iostream> using namespace std; int main() { int dis[20001] = {0}, u[20000...原创 2018-10-22 08:05:37 · 753 阅读 · 0 评论 -
排列组合
排列组合 从n种情况选m个选择,有多少中可能: C n m 边乘边除法 int C(int n, int m) { int ans = 1; for(int i = 1; i <= m; i++) ans = ans * (n - m + i) / i; return ans; } ...原创 2018-07-03 08:31:54 · 185 阅读 · 0 评论 -
计算质因子个数
计算质因子个数 计算数字 n 中有因子 a 的个数普通计算 int f(int n, int a) { int ans = 0; while(n % a == 0) { ans++; n /= a; } return ans; } 进阶:计算数字 !n 中有因子 a 的个数普通计算 有一个公式:利用这个公式可以把时间复杂度降...原创 2018-07-02 15:56:56 · 2452 阅读 · 1 评论 -
素数筛子
素数筛子 打印出1-100000内所有的素数 假定所有数都是素数,然后从头遍历把素数的所有倍数(2,3,4…n倍)筛掉,则剩下的为真素数。维护一个bool类型数组,false表示没被筛掉,true表示被筛掉了。 #include<stdio.h> int main() { bool num[100001] = {false}; for(int i = 2; i &...原创 2018-07-02 11:21:09 · 970 阅读 · 0 评论 -
快速幂
快速幂 基于二分思想,时间复杂度为O(logb); 当b奇数,ans = ans * (a ^ (b - 1) % m); 当b偶数,ans = (a ^ (b / 2) % m) * (a ^ (b / 2) % m); 当b为零,退出。 #include &lt;iostream&gt; #include &lt;bitset&gt; using namespace std; lon...原创 2018-07-02 08:38:31 · 115 阅读 · 0 评论 -
最 简单 详细 易懂的反转链表
最 简单 详细 易懂的反转链表 思想: 把原始链表节点一个个切下来,粘到左边的新链表上(左链表初始为空),时间复杂度O(n),空间复杂度O(1) 链表变化过程: node1-&gt;node2-&gt;node3-node4 --------一个个切下粘到左边---------- node1 ... node2-&gt;node3-&gt;node4 node1&lt...原创 2019-01-28 01:46:46 · 433 阅读 · 0 评论