算法笔记
minjiex
这个作者很懒,什么都没留下…
展开
-
全排列 公式&手动实现
全排列 公式&手动实现#includeperv_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 · 1972 阅读 · 0 评论 -
高精度加法和乘法
高精度加法和乘法加法(只支持自然数的大整数相加)1.通过模拟加法算式,从右往左依次累加,如果两个不一样长,要在短的前面用0补上。2.取余保留,除10进位,注意最后一位如果有进位要把进位加上去。乘法(只支持自然数的大整数相乘)1. 通过模拟乘法算式,从右往左数的话,s1[i] * s2[j] 贡献给了ans[i+j]。2.所以为了方便从右往左数, 先把s1,s2翻转,且乘法后的结果...原创 2018-10-27 23:52:13 · 329 阅读 · 0 评论 -
双向队列 deque 和 list
双向队列 deque 和 list效率l介于ist和vector之间,支持随机访问(比vector效率低,比list高),支持两端插入删除(效率比list低,比vctor高)内部分块存储,结构比较复杂,不做深究1、需要高效的随即存取,不关心插入和删除的效率,用vector2、大量的插入和删除,不关心随即存取,用list3、既需要随即存取,又要两端数据的插入和删除,用deque。双向队列...原创 2018-10-22 19:17:11 · 476 阅读 · 0 评论 -
优先队列使用
优先队列详解和使用1.优先队列和普通队列相似,但是出队按照优先级高的先出对,进队和出队时间复杂度都为O(log2n)。2.因为内部原理是用堆实现,插入时候把堆调整(花费o(log2n)),删除时直接删除堆顶(O(1)),然后把剩下元素调整(O(long2 n))。把一个原始无序集合,通过完全二叉树够造成堆花费O(nlog2n)。3.(1).适用于动态添加和删除时,实时维护最值。(2).也可用...原创 2018-10-19 23:28:09 · 372 阅读 · 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 · 763 阅读 · 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 · 204 阅读 · 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 · 2485 阅读 · 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 · 981 阅读 · 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 · 128 阅读 · 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 · 440 阅读 · 0 评论