- 博客(30)
- 收藏
- 关注
原创 Spring Boot 实现登录拦截器
spring boot实现拦截器原理SpringBoot通过实现HandlerInterceptor接口实现拦截器,通过实现WebMvcConfigurer接口实现一个配置类,在配置类中注入拦截器,最后再通过@Configuration注解注入配置。 用户未登录不能访问其他界面,只能强制跳转到登录界面;登录之后,关闭整个浏览器前保持登录状态并不会重复强制登录。 1.实现HandlerInterceptor接口实现Ha...
2021-08-19 09:32:17
367
原创 递归、分治、二分、三分
例1:汉诺塔问题汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界 的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。 并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。n = 1 时,直接把盘子从 A 移到 C;n > 1 时,先把上面 n - 1 个盘子从 A 移到 B(子问题,递归)
2021-04-03 21:11:02
524
原创 1116 Come on! Let‘s C (20 分) 二叉树BST的创建,插入
题目#include <bits/stdc++.h>using namespace std;struct node{ int val; node *left, *right;};void insert(node* &root, int val) { if(root == nullptr) { root = new node; root->val = val; root->left = roo
2021-02-14 14:22:21
88
原创 枚举(前缀和/差分、尺取、状压)、贪心
枚举什么是枚举?——列举要点:不重复,不遗漏优化枚举的基本思路:——减少枚举次数选择合适的枚举对象选择合适的枚举方向——方便排除法和不是最优的情况选择合适的数据维护方法——转化问题例1:最大正方形在一个N*N(N<=100)矩阵中求一个最大的正方形使得该正方形的四个顶点都是有字符“#”构成。#*#*********#*#*#*******#********#**暴力枚举四点,四重循坏,一定会超时正方形可以由两个点唯一确定长方形可以由三个点唯一确定先枚
2021-02-13 23:19:38
533
原创 PAT甲级 1112 Stucked Keyboard
题目链接#include <bits/stdc++.h>using namespace std;int main() { int k; string str; unordered_map<char, int> mp; cin >> k >> str; for(int i = 0; i < str.length(); i++) { mp[str[i]] = 0; }
2021-01-24 14:21:27
93
原创 PAT甲级 1110 Complete Binary Tree 判断一棵树是否是完全二叉树
题目来源:PAT甲级 1110 Complete Binary Tree#include <bits/stdc++.h>using namespace std;struct node { int l, r; int key;} tree[25];int root, lastNode;bool IsCompleteBinaryTree() { // 验证是否为完全二叉树 bool flag = false; queue<int> q;
2021-01-22 16:47:57
75
原创 KMP算法
给定一个文本串 text 和一个模式串 pattern,然后判断模式串 pattern 是否是文本串 text 的子串KMP算法复杂度是O(n + m)#include <bits/stdc++.h>using namespace std;int next[105];void getNext(char s[], int len){ int j = -1; next[0] = -1; for(int i = 1; i < len; i++){ while(j != -1
2020-11-03 18:01:00
62
原创 排序模板
冒泡排序void bubbleSort(int a[], int n){ for(int i = 1; i < n; i++){ for(int j = n-1; j >= i; j--){ if(a[j] < a[j-1]){ swap(a[j], a[j-1]); } ...
2020-04-07 10:00:26
251
原创 任意进制转十进制
#include <cstdio>#include <iostream>#include <cstring>#include <iostream>using namespace std;typedef long long LL;LL inf = (1LL<<63) - 1; // 2^63 - 1 long long in...
2020-04-01 14:44:22
143
原创 [-128,127]内十进制转二进制
#include <iostream>using namespace std;int arr[10];int main(){ int n, m = 0, f = 0; cin >> n; if(n < 0){ n += 128, f = 1; } while(n){ arr[m++] = n % 2; n /=...
2020-02-27 19:38:30
1221
原创 背包问题模板
01背包有N种物品和一个容量为V的背包。第 i 件物品的费用是 c[i],价值是 w[i]。由于每种物品有且仅有一件,因此只能选择放或不放,我们称之为 01 背包问题。现在你需要选出若干件物品,在它们的重量之和不超过 V 的情况下,使总价值尽可能达到最大。for (int i = 1; i <= N; ++i) { for (int j = 0; j <= V; ++j) ...
2020-02-25 15:57:19
104
原创 欧几里得相关算法模板
#include <iostream> using namespace std;int gcd(int a, int b){ //欧几里得 求最大公约数 if(b == 0){ return a; }else{ return gcd(b, a%b); }}int lcm(int a,int b) //求最小公倍数 { return a/gcd...
2020-02-20 21:35:05
95
原创 动态规划经典例子
数塔问题求第一层到最后一层的路径,将该路径上的所有数字相加后得到的和最大是多少。#include <iostream>using namespace std;const int maxn = 1000;int f[maxn][maxn], dp[maxn][maxn];int main(){ int n; cin >> n; //n为层数 ...
2020-01-21 17:07:42
197
原创 Tex中的引号
在TeX中,左双引号是 “ , 右双引号是 “ 。编写程序,把英文输入法中的双引号转换为中文输入法的双引号。#include <cstdio> #include <cstring>int main(){ int q = 1; char str[100], c; scanf("%[^\n]", str); //scanf输入带空格的字符串 fo...
2020-01-21 13:31:51
176
原创 蛇形填数
在n*m矩阵中里填入1,2,3,…,n *m。例如,n = 6, m = 8时矩阵为:#include <cstdio>const int maxn = 50;int a[maxn][maxn];int main(){ int n, m, x, y, tol; scanf("%d%d", &n, &m); a[x=0][y=m-1] = to...
2020-01-21 13:04:34
116
原创 康托展开与逆康托展开
康托展开是一个全排列到一个自然数的双射,常用于构建hash表时的空间压缩。设有n个数(1,2,3,4,…,n),可以有组成不同(n!种)的排列组合,康托展开表示的就是是当前排列组合例如对于 1 ~ 4 的一个全排列, [1, 2, 3, 4] 和 [4, 3, 2, 1]分别为第一个和最后一个排列。康托展开公式为:*X=a[n](n-1)!+a[n-1](n-2)!+…+a[i]*(...
2019-10-13 14:22:11
326
原创 贪心算法之区间问题
问题描述:有n项工作,每项工作分别在 S 时间开始,在 T 时间结束。 此外,参与工作的时间段不能重复输入格式第一行是一个整数 n ,接下来 n 行每行是 2 个整数 S, T (S < T),表示工作开始、结束的时间。输出格式一个整数,即最多参加的比赛数目输入30 22 41 3输出2代码如下:#include <io...
2019-10-12 16:36:58
107
原创 大整数的四则运算
对一道 A+B 的题目, 如果A 和 B的范围在 int 范围内, 那么将非常简单。但是如果A 和 B是有着1000个数位的整数,就不能简单地用已有的数据类型来表示, 必然会发生溢出。此外, 大整数又称为高精度整数, 其含义就是用基本数据类型无法存储其精度的整数。大整数的存储:为了方便随时获取大整数的长度,一般都会定义一个 int 型变量 len 来记录其长度, 并和 d 数组组合成结构体...
2019-10-04 00:45:36
304
原创 素数
素数又称为质数, 是指除了 1 和 本身之外, 不能被其他数整除的一类数。最简单的算法:若判断 n 是否为素数, 只需判定 n 能否被2,3,4,·····,sqrt(n) 中的一个整除, 即可判定 n 是否为素数。该算法的复杂度为 O (sqrt(n)) 。bool isPrime(int n){ if(n <= 1) return false; for(int i=2;...
2019-10-03 15:47:57
83
原创 快速幂
给定三个正整数a , b , m (a < 10^9, b < 10^18, 1 < m < 10^9),求a^b%m。由于数据规模太大,单纯地使用循环一定会发生溢出,即使用long long。这里要使用快速幂的做法,它基于二分思想,也被称为二分幂。快速幂基于以下事实:如果 b 是奇数, 那么有 ; 如果 b 是偶数, 那么有 ;显然, b 是奇数的情况...
2019-10-02 21:24:14
73
原创 测试程序运行时间
clock():捕捉从程序开始运行到 clock() 被调用时所耗费的时间。这个时间单位是clock tick,即“时钟打点”。常数 CLK_TCK : 机器时钟每秒所走的时钟打点数。#include <stdio.h>#include <time.h>clock_t start, stop;/* clock_t 是 clock() 函数返回的变量类型 ...
2019-09-29 00:32:53
121
原创 求最大公约数与最小公倍数
最大公约数最高效的算法为欧几里德算法。int gcd(int a, int b){ return b == 0 ? a : gcd(b, a%b);}最小公倍数求出最大公约数后,用两个数的乘积除以最大公约数即可。int lcm(int a, int b) { return a*b / gcd(a, b);}...
2019-09-09 16:38:30
84
原创 二分法查找
二分查找的时间复杂度为 O(log n) , 它远远好于顺序查找的 O(n) 时间复杂度。但是二分查找的前提是线性表或数组中的记录必须是关键码有序(通常是从小到大),这可以调用C++的STL中的sort排序。sort排序 详解(C++)代码如下:#include <iostream>#include <algorithm>using namespace...
2019-04-28 23:43:14
126
原创 抽象深度优先搜索 k个数的和
先来看一个非常简单的问题:给定n个整数, 要求选出 K 个数, 使得选出来的 K 个数的和为 sum。借助 dfs 来解决问题, 对每一个数, 枚举选或者不选两种情况, 我们可以用 dfs 思想来完成这样的枚举过程。搜素过程中, 用 s 来记录当前选择的数值总和, k 用来记录选择的数的个数, deep 表示当前正在枚举第几个数是否选择。在第一层dfs的时候, 我们可以枚举是否选第...
2019-04-09 18:29:14
323
原创 抽象深度优先搜索:八皇后
八皇后问题是一个经典的问题, 在一个8 × 8 的棋盘上, 每行刚好放置一个并不能互相攻击(同一行,同一列,同一斜线上的皇后都会自动攻击)。上图就是一个合法的八皇后的解。利用数组标记已筛选皇后的同一行,同一列,同一斜线上, 那么同一行,同一列,同一斜线上的位置将不能放置皇后。同一行,同一列的标记,但最难处理的是同一斜线的标记, 可以通过暴力枚举,但有一种更巧妙地方法。...
2019-03-30 16:05:11
226
原创 深度优先搜素 迷宫
使用简单的深度优先搜素来寻找迷宫的出口, 并显示正确的路径。现有一个由各种符号组成的简单迷宫地图 ‘S' :起点 ’T ‘:终点 ‘ * ’:障碍#include <iostream>#include <string>using namespace std;int n, m; //n为行, m...
2019-03-24 18:42:57
466
原创 日期问题
很多编程题都涉及日期问题,最常见的就是给出一个 xx年xx月xx日 的日期,求 n 天后的xx年xx月xx日。每年的天数不同,每个月的天数也不同,这使得问题变得更加复杂。众所周知,每年的二月份的天数有两种,29天和28天。决定二月份的天数不同的就是闰年。闰年:1. 年份非整百且能被4整除的为闰年。 2. 年份能被400整除的是闰年。实现代码:int ...
2019-03-11 18:26:26
357
原创 sort排序 详解(C++)
对于一个数组,通过对数组中的元素进行交换,我们可以将数组中的元素按从小到大的或从大到小的顺序排列当我们希望对数组中的元素进行排序时,我们可以使用C++为我们提供的工具——sort。sort是一个C++已经为我们实现好的工具,当我们要用它时,需要先引入一个算法的库——<algorithm>.需要说明的是,sort可以排序任何类型的元素,包括我们自己定义的结构体。我们将需...
2019-03-09 19:29:08
1977
1
原创 回文数,最简证法
回文数是指从左到右与从右到左读都一样的正整数,如11,101,111,121,…,191,202,…,999.思路: 仔细观察回文数,可知回文数的正序与反序相同,所以我们可把数反序,再与正序比较代码如下:#include <stdio.h>int main(){ int num; scanf("%d", &num); int ...
2019-03-07 22:05:17
234
原创 十进制转任意进制
最简单易懂的写法就是运用数组。#include <iostream>using namespace std;char ans[205];int main(){ int N, R, m=0, now; cin>>N>>R; if( N < 0 ){ cout<<"-"; //有可能是负整数 N = ...
2019-03-05 18:01:45
292
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人