一、简介 Dijkstra算法是由荷兰计算机科学家Edsger Wybe Dijkstra于1959年提出的,是从一个顶点到其余各顶点的最短路径算法,解决的是有权图中最短路径问题。Dijkstra算法主要特点是从起始点开始,采用贪心算法的策略,每次遍历到始点距离最近且未访问过的顶点的邻接节点,直到扩
一、认证 进入后台界面后,选择访问控制->客户端认证 在右上角选择创建 认证方式选择JWT JWT无需选择数据源 配置参数 JWT来自于password 加密方式hmac-based Secret填写预设的JWT私钥,关闭Base64编码 配置负载验证 Claim Expected Value cl
一、引入依赖 <dependency> <groupId>org.springframework.integration</groupId> <artifactId>spring-integration-stream</artifact
一、DFS与BFS的原理 有请我们的五毛钱特效! DFS BFS 二、DFS的实现 AcWing842 排列数字 #include <iostream> using namespace std; const int N =
一、什么是哈希表? 通过一个散列函数,将任意元素映射在数组下标中。它提供了快速的插入操作和查找操作,无论哈希表中有多少条数据,插入和查找的时间复杂度都是为$O(1)$。 二、哈希表的存储结构(冲突的处理方式) 开放寻址法 拉链法:在冲突位置引出链表 三、数字哈希
一、堆是什么? 堆是一棵完全二叉树 完全二叉树:除了最后一层节点,全部非空的二叉树,且最后一层节点从左往右排布 小根堆:每个节点都小于两个子节点 存储方式:一维数组,下标从1开始,下标x的左子节点是下标2x,右子节点是下标2x+1 二、如何手写一个堆? 初始化,读入堆 for (int i = 1;
一、Trie树的基本作用: 高效地存储和查找字符串集合的数据结构 例如,我们要存储以下字符串:abcdef,abdef,aced,bcdf,bcff,cdaa,abc,我们可以以树的形式存储: 在这里,我们以标红的形式来标记每个字符串的末尾。 二、代码实现 初始化 #include <iostrea
一、并查集的作用 将两个集合合并 询问两个元素是否在同一个集合当中 二、并查集的基本原理 每个集合用一棵树来表示。树根的编号就是整个集合的编号。每个节点存储它的父节点,p[x]表示x的父节点 如何判断树根:if(p[x]==x) 如何求x的集合编号:while(p[x]!=x) x=p[x]; 如何
一、暴力求解! string s, p; //长度为n的模式串s和长度为m的模版串p for (int i = 1; i <= n; i++) { bool flag = true; for (int j = 1; j <= m; j++) { if (s[i - j + 1] != p
一、基本概念 栈:先进后出。越后插入的元素,越先弹出来(有底的圆桶) 队列:先进先出。越先插入的元素,越先弹出来(无底的圆桶) 二、实现 栈: #include <iostream> using namespace std; const int N = 100010; int stk[N], tt
一、用数组模拟单链表 邻接表:单链表的集合 单链表 #include <iostream> using namespace std; const int N = 100010; //head表示头节点的下标 //e[i]表示节点i的值 //ne[i]表示节点i的next指针是多少 //idx表示当前
一、离散化的含义: 对于数组a[]={1,3,100,2000,500000,......},把他们一一映射到下标0,1,2,3,4,......的过程叫做离散化 注意: a[]中可能有重复元素 ,需要去重 如何算出x离散化后的值:二分 二、离散化的过程 vector::erase()的用法:从ve
一、基础知识 &:与:两个位都为1时,结果才为1 3&5 即 0000 0011 & 0000 0101 = 0000 0001,因此 3&5 的值得1 |:或:两个位都为0时,结果才为0 3|5即 0000 0011 | 0000 0101 = 0000 0111,因此3|5的值得7 ^:异或:两
前缀和与差分互为逆运算 一、一维前缀和 设有序列${a}_1,{a}_2,{a}_3......{a}_n$,则该序列的前缀和${S}_i={a}_1+{a}_2+{a}_3+......+{a}_i$ 作用:快速求出${a}_l$到${a}_r$之间所有数的和:${S}_r-{S}_{l-1}$
核心思想: 对于一个序列:用两个指针维护一段区间 对于两个序列:用两个指针对两个序列进行有规律地维护(如归并排序) 将时间复杂度O(n^2)的算法优化至O(n) for (int i = 0; i < n; i++) { for (int j = 0; i < m; j++) { //...