自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(26)
  • 收藏
  • 关注

原创 DFS——深度优先搜索——排列数字

DFS——深度优先搜索——排列数字题目描述复杂度代码题目描述给定一个整数 n,将数字 1∼n 排成一排,将会有很多种排列方法。现在,请你按照字典序将所有的排列方法输出。输入格式共一行,包含一个整数 n。输出格式按字典序输出所有排列方案,每个方案占一行。数据范围1≤n≤7输入样例:3输出样例:1 2 31 3 22 1 32 3 13 1 23 2 1复杂度时间复杂度为 O(n*n!)。空间复杂度为 O(n)。代码import java.util.*;pub

2021-09-19 10:27:12 199

原创 Acwing——堆排序

Acwing——堆排序题目描述题目分析解决方案题目描述输入一个长度为 n 的整数数列,从小到大输出前 m 小的数。输入格式第一行包含整数 n 和 m。第二行包含 n 个整数,表示整数数列。输出格式共一行,包含 m 个整数,表示整数数列中前 m 小的数。数据范围1≤m≤n≤105,1≤数列中元素≤109输入样例:5 34 5 1 3 2输出样例:1 2 3题目分析堆的五个操作(堆是一个完全二叉树的形状)堆是有序(从小到大):把堆初始化成小根堆,从二叉树的倒数第二行开始,

2021-09-09 08:42:15 416

原创 数据结构——(计数)并查集——连通块中点的数量

数据结构——并查集——连通块中点的数量题目描述题目分析解决方案题目描述给定一个包含 n 个点(编号为 1∼n)的无向图,初始时图中没有边。现在要进行 m 个操作,操作共有三种:1.C a b,在点 a 和点 b 之间连一条边,a 和 b 可能相等;2.Q1 a b,询问点 a 和点 b 是否在同一个连通块中,a 和 b 可能相等;3.Q2 a,询问点 a 所在连通块中点的数量;输入格式第一行输入整数 n 和 m。接下来 m 行,每行包含一个操作指令,指令为 C a b,Q1 a b 或 Q

2021-08-19 15:07:06 384 1

原创 数据结构——并查集——合并集合

数据结构——树的应用——合并集合题目描述题目分析解决方案题目描述一共有 n 个数,编号是 1∼n,最开始每个数各自在一个集合中。现在要进行 m 个操作,操作共有两种:1.M a b,将编号为 a 和 b 的两个数所在的集合合并,如果两个数已经在同一个集合中,则忽略这个操作;2.Q a b,询问编号为 a 和 b 的两个数是否在同一个集合中;输入格式第一行输入整数 n 和 m。接下来 m 行,每行包含一个操作指令,指令为 M a b 或 Q a b 中的一种。输出格式对于每个询问指令 Q

2021-08-18 15:58:22 413

原创 Trie树实例——最大异或对

Trie树实例——最大异或对题目描述题目分析解决方案题目描述在给定的 N 个整数 A1,A2……AN 中选出两个进行 xor(异或)运算,得到的结果最大是多少?输入格式第一行输入一个整数 N。第二行输入 N 个整数 A1~AN。输出格式输出一个整数表示答案。数据范围1≤N≤105,0≤Ai<231输入样例:31 2 3输出样例:3题目分析先想出暴力解法(二重循环)import java.util.*;import java.math.*;public cl

2021-08-16 11:48:50 87

原创 Trie(前缀树/字典树)字符串统计

Trie(前缀树/字典树)字符串统计题目描述题目分析解决方案题目描述维护一个字符串集合,支持两种操作:I x 向集合中插入一个字符串 x;Q x 询问一个字符串在集合中出现了多少次。共有 N 个操作,输入的字符串总长度不超过 105,字符串仅包含小写英文字母。输入格式第一行包含整数 N,表示操作数。接下来 N 行,每行包含一个操作指令,指令为 I x 或 Q x 中的一种。输出格式对于每个询问指令 Q x,都要输出一个整数作为结果,表示 x 在集合中出现的次数。每个结果占一行。数据范

2021-08-15 10:13:37 236

原创 Kmp字符串

Kmp字符串题目描述代码题目描述给定一个模式串 S,以及一个模板串 P,所有字符串中只包含大小写英文字母以及阿拉伯数字。模板串 P 在模式串 S 中多次作为子串出现。求出模板串 P 在模式串 S 中所有出现的位置的起始下标。输入格式第一行输入整数 N,表示字符串 P 的长度。第二行输入字符串 P。第三行输入整数 M,表示字符串 S 的长度。第四行输入字符串 S。输出格式共一行,输出所有出现位置的起始下标(下标从 0 开始计数),整数之间用空格隔开。数据范围1≤N≤1051≤M≤1

2021-08-13 12:11:47 69

原创 数据结构——单调队列(滑动窗口)(Scanner会超时,所以使用BufferedReader))

数据结构——单调队列(滑动窗口)题目描述暴力解法(数据量大会超时)时间复杂度nk单调队列题目描述给定一个大小为 n≤106 的数组。有一个大小为 k 的滑动窗口,它从数组的最左边移动到最右边。你只能在窗口中看到 k 个数字。每次滑动窗口向右移动一个位置。以下是一个例子:该数组为 [1 3 -1 -3 5 3 6 7],k 为 3。窗口位置最小值最大值[1 3 -1] -3 5 3 6 7-131 [3 -1 -3] 5 3 6 7-331 3 [-1

2021-08-12 13:08:49 139

原创 数据结构——单调栈

数据结构——单调栈题目描述暴力解法(二重循环)(当数据量很大时会超时)单调栈解法题目描述给定一个长度为 N 的整数数列,输出每个数左边第一个比它小的数,如果不存在则输出 −1。输入格式第一行包含整数 N,表示数列长度。第二行包含 N 个整数,表示整数数列。输出格式共一行,包含 N 个整数,其中第 i 个数表示第 i 个数的左边第一个比它小的数,如果不存在则输出 −1。数据范围1≤N≤1051≤数列中元素≤109输入样例:53 4 2 7 5输出样例:-1 3 -1 2 2

2021-08-09 21:31:33 79

原创 数据结构——数组模拟栈

数据结构——数组模拟栈题目描述解决方案题目描述实现一个栈,栈初始为空,支持四种操作:push x – 向栈顶插入一个数 x;pop – 从栈顶弹出一个数;empty – 判断栈是否为空;query – 查询栈顶元素。现在要对栈进行 M 个操作,其中的每个操作 3 和操作 4 都要输出相应的结果。输入格式第一行包含整数 M,表示操作次数。接下来 M 行,每行包含一个操作命令,操作命令为 push x,pop,empty,query 中的一种。输出格式对于每个 empty 和 query

2021-08-09 20:10:14 103

原创 数据结构——数组模拟双链表

数据结构——数组模拟双链表题目描述题目分析解决方案题目描述实现一个双链表,双链表初始为空,支持 5 种操作:在最左侧插入一个数;在最右侧插入一个数;将第 k 个插入的数删除;在第 k 个插入的数左侧插入一个数;在第 k 个插入的数右侧插入一个数现在要对该链表进行 M 次操作,进行完所有操作后,从左到右输出整个链表。注意:题目中第 k 个插入的数并不是指当前链表的第 k 个数。例如操作过程中一共插入了 n 个数,则按照插入的时间顺序,这 n 个数依次为:第 1 个插入的数,第 2 个插入的数

2021-08-08 12:26:39 86

原创 数据结构——数组模拟单链表

数据结构——数组模拟单链表题目描述题目分析解决方案题目描述实现一个单链表,链表初始为空,支持三种操作:向链表头插入一个数;删除第 k 个插入的数后面的数;在第 k 个插入的数后插入一个数。现在要对该链表进行 M 次操作,进行完所有操作后,从头到尾输出整个链表。注意:题目中第 k 个插入的数并不是指当前链表的第 k 个数。例如操作过程中一共插入了 n 个数,则按照插入的时间顺序,这 n 个数依次为:第 1 个插入的数,第 2 个插入的数,…第 n 个插入的数。输入格式第一行包含整数 M,表示

2021-08-08 09:53:22 145 1

原创 (算法-区间合并)

(算法-区间合并)题目描述题目分析解决方案题目描述给定 n 个区间 [li,ri],要求合并所有有交集的区间。注意如果在端点处相交,也算有交集。输出合并完成后的区间个数。例如:[1,3] 和 [2,6] 可以合并为一个区间 [1,6]。输入格式第一行包含整数 n。接下来 n 行,每行包含两个整数 l 和 r。输出格式共一行,包含一个整数,表示合并区间完成后的区间个数。数据范围1≤n≤100000,−109≤li≤ri≤109输入样例:51 22 45 67 87 9

2021-07-29 16:31:47 173

原创 (算法-位运算)二进制中1的个数

(算法-位运算)二进制中1的个数题目描述题目分析解决方案题目描述给定一个长度为 n 的数列,请你求出数列中每个数的二进制表示中 1 的个数。输入格式第一行包含整数 n。第二行包含 n 个整数,表示整个数列。输出格式共一行,包含 n 个整数,其中的第 i 个数表示数列中的第 i 个数的二进制表示中 1 的个数。数据范围1≤n≤100000,0≤数列中元素的值≤109输入样例:51 2 3 4 5输出样例:1 1 2 1 2题目分析二进制运算& 与 两个位都为1时

2021-07-27 10:42:42 269

原创 (算法-双指针)判断子序列

这里写目录标题题目描述题目分析解决方案题目描述给定一个长度为 n 的整数序列 a1,a2,…,an 以及一个长度为 m 的整数序列 b1,b2,…,bm。请你判断 a 序列是否为 b 序列的子序列。子序列指序列的一部分项按原有次序排列而得的序列,例如序列 {a1,a3,a5} 是序列 {a1,a2,a3,a4,a5} 的一个子序列。输入格式第一行包含两个整数 n,m。第二行包含 n 个整数,表示 a1,a2,…,an。第三行包含 m 个整数,表示 b1,b2,…,bm。输出格式如果 a

2021-07-27 09:18:42 203

原创 (算法-双指针)数组元素的目标和

(算法-双指针)数组元素的目标和题目描述题目分析解决方案题目描述给定两个升序排序的有序数组 A 和 B,以及一个目标值 x。数组下标从 0 开始。请你求出满足 A[i]+B[j]=x 的数对 (i,j)。数据保证有唯一解。输入格式第一行包含三个整数 n,m,x,分别表示 A 的长度,B 的长度以及目标值 x。第二行包含 n 个整数,表示数组 A。第三行包含 m 个整数,表示数组 B。输出格式共一行,包含两个整数 i 和 j。数据范围数组长度不超过 105。同一数组内元素各不相同。

2021-07-26 08:57:48 108

原创 (算法-双指针)最长连续不重复子序列

(算法-最长连续不重复子序列)题目描述题目分析解决方案题目描述给定一个长度为 n 的整数序列,请找出最长的不包含重复的数的连续区间,输出它的长度。输入格式第一行包含整数 n。第二行包含 n 个整数(均在 0∼105 范围内),表示整数序列。输出格式共一行,包含一个整数,表示最长的不包含重复的数的连续区间的长度。数据范围1≤n≤105输入样例:51 2 2 3 5输出样例:3题目分析1.朴素算法:时间复杂度O(n^2)for(int i=0,i<n;i++) fo

2021-07-25 10:40:23 233

原创 (算法-差分)二维差分矩阵(普遍Scanner会超时,所以使用BufferedReader)

(算法-差分)二维差分矩阵题目描述题目分析解决方案题目描述输入一个 n 行 m 列的整数矩阵,再输入 q 个操作,每个操作包含五个整数 x1,y1,x2,y2,c,其中 (x1,y1) 和 (x2,y2) 表示一个子矩阵的左上角坐标和右下角坐标。每个操作都要将选中的子矩阵中的每个元素的值加上 c。请你将进行完所有操作后的矩阵输出。输入格式第一行包含整数 n,m,q。接下来 n 行,每行包含 m 个整数,表示整数矩阵。接下来 q 行,每行包含 5 个整数 x1,y1,x2,y2,c,表示一个操

2021-07-24 19:23:02 247

原创 (算法-差分)一维

(算法-差分)差分原理题目描述题目分析解决方案差分原理差分就是前缀和的逆运算有一个数列a1,a2,……an构造b1,b2……bn使得ai=b1+b2+……+bibi=ai-a(i-1)在前缀和中就是已知s数列求a数列题目描述输入一个长度为 n 的整数序列。接下来输入 m 个操作,每个操作包含三个整数 l,r,c,表示将序列中 [l,r] 之间的每个数加上 c。请你输出进行完所有操作后的序列。输入格式第一行包含两个整数 n 和 m。第二行包含 n 个整数,表示整数序列。接下来 m

2021-07-23 10:56:05 171

原创 (算法-前缀和)二维,求子矩阵的和

(算法-前缀和)二维,求子矩阵的和题目描述题目分析解决方案题目描述输入一个 n 行 m 列的整数矩阵,再输入 q 个询问,每个询问包含四个整数 x1,y1,x2,y2,表示一个子矩阵的左上角坐标和右下角坐标。对于每个询问输出子矩阵中所有数的和。输入格式第一行包含三个整数 n,m,q。接下来 n 行,每行包含 m 个整数,表示整数矩阵。接下来 q 行,每行包含四个整数 x1,y1,x2,y2,表示一组询问。输出格式共 q 行,每行输出一个询问的结果。数据范围1≤n,m≤1000,1≤q

2021-07-22 10:10:02 256

原创 (算法-前缀和)一维

(算法-前缀和)一维题目描述题目分析解决方案题目描述输入一个长度为 n 的整数序列。接下来再输入 m 个询问,每个询问输入一对 l,r。对于每个询问,输出原序列中从第 l 个数到第 r 个数的和。输入格式第一行包含两个整数 n 和 m。第二行包含 n 个整数,表示整数数列。接下来 m 行,每行包含两个整数 l 和 r,表示一个询问的区间范围。输出格式共 m 行,每行输出一个询问的结果。数据范围1≤l≤r≤n,1≤n,m≤100000,−1000≤数列中元素的值≤1000输入样例

2021-07-19 14:25:39 50

原创 (算法-二分)浮点数二分-求一个数的三次方根

(算法-二分)浮点数二分-求一个数的三次方根题目描述题目分析误差分析二分(当n>=1时)(当0<=n<1时)(当n<0时)解决方案题目描述给定一个浮点数 n,求它的三次方根。输入格式共一行,包含一个浮点数 n。输出格式共一行,包含一个浮点数,表示问题的解。注意,结果保留 6 位小数。数据范围−10000≤n≤10000输入样例:1000.00输出样例:10.000000题目分析误差分析浮点数二分没有整数二分的边界问题,只需要注意题目给出的输出格式

2021-07-15 10:01:16 730 1

原创 (算法-二分)整数二分-查找数的范围

题目描述:给定一个按照升序排列的长度为 n 的整数数组,以及 q 个查询。对于每个查询,返回一个元素 k 的起始位置和终止位置(位置从 0 开始计数)。如果数组中不存在该元素,则返回 -1 -1。输入格式第一行包含整数 n 和 q,表示数组长度和询问个数。第二行包含 n 个整数(均在 1∼10000 范围内),表示完整数组。接下来 q 行,每行包含一个整数 k,表示一个询问元素。输出格式共 q 行,每行包含两个整数,表示所求元素的起始位置和终止位置。如果数组中不存在该元素,则返回 -1

2021-07-09 10:42:46 255 1

原创 归并排序的实现

归并排序1.确定分界点mid=(l+r)/2,将数组二分,分治2.将第一步的操作进行递归,使数组无限二分成一个一个的只有一个元素的数组static void merge_sort(int q[],int l,int r){ if(l>=r) return; int mid=(l+r)/2; merge_sort(q,l,mid);//左边 merge_sort(q,mid+1,r);//左边偶数数组递归后奇数数组递归后3.将二叉树自底向上看,每一对兄弟结点进行

2021-07-07 15:59:44 68

原创 快速排序(双指针法)

快速排序(双指针法)1.确定分界点(x):左侧端点q[l],中间q[l+r/2],右侧q[r],选择一个,令它为x2.定义两个指针i,ji从指向q[l]开始向后移动,如果q[i]<x,就继续向后移动,如果,q[i]>=x,停止。j从指向去q[r]开始向前移动,如果q[j]>x,就继续向前移动,如果,q[j]<=x,停止。然后,交换q[i],q[j],使得比x小的数在左边,比x大的数在右边,分治。当两指针即将相遇时,停止,此时q[i]的左边全部小于x,q[j]的右边全部

2021-07-07 10:47:04 1197

原创 java中Sanner类的nextInt读入后按anter,后面的nextLine无法读入的问题

java中Sanner类的nextInt读入后按anter,后面的nextLine无法读入的问题项目场景:问题描述:原因分析:解决方案:欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入项目场景

2021-07-07 10:22:04 122

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除