Java每一题
文章平均质量分 53
本专栏为博主的go语言的学习记录。
极客李华
CSDN,阿里社区内容合伙人、系统分析师、全网20万粉丝的技术博主,交流合作私信+。欢迎技术交流。
展开
-
归并排序代码实现
第二行包含 n 个整数(所有整数均在 1∼109 范围内),表示整个数列。将一段序列不断的迭代划分成两个区间,直到子区间为空或者只剩一个元素。算法的时间复杂度的话:最差的时间复杂度也有O(nlogn)然后不断将已有序的子序列递归合并,最终得到完全有序的序列。输出共一行,包含 n 个整数,表示排好序的数列。这个题需要记住的是这个归并排序的模板,原理的话。那么也就意味着所有子区间都成了有序的序列。给定你一个长度为 n 的整数数列。输入共两行,第一行包含整数 n。并将排好序的数列按顺序输出。原创 2023-01-14 17:36:16 · 87 阅读 · 0 评论 -
动态求连续区间和
给定 n 个数组成的一个数列,规定有两种操作,一是修改某个元素,二是求子数列 [a,b] 的连续和。输入格式第一行包含两个整数 n 和 m,分别表示数的个数和操作次数。第二行包含 n 个整数,表示完整数列。接下来 m 行,每行包含三个整数 k,a,b (k=0,表示求子数列[a,b]的和;k=1,表示第 a 个数加 b)。数列从 1 开始计数。输出格式输出若干行数字,表示 k=0 时,对应的子数列 [a,b] 的连续和。数据范围1≤a≤b≤n,原创 2023-01-14 17:28:01 · 136 阅读 · 0 评论 -
连号区间数
连号区间数小明这些天一直在思考这样一个奇怪而有趣的问题:在 1∼N 的某个排列中有多少个连号区间呢?这里所说的连号区间的定义是:如果区间 [L,R] 里的所有元素(即此排列的第 L 个到第 R 个元素)递增排序后能得到一个长度为 R−L+1 的“连续”数列,则称这个区间连号区间。原创 2023-01-13 20:14:55 · 138 阅读 · 0 评论 -
蚂蚁感冒(蓝桥杯)
还有一种特殊情况,就是当第一只蚂蚁向左走的时候,如果第一只蚂蚁左边没有向右爬行的蚂蚁,由于爬行速度相同,所以不管第一只蚂蚁右边有多少向左爬行的,其右边的蚂蚁永远不可能被感染。首先我们必须要明白两只蚂蚁相撞掉头可以看作时一只蚂蚁穿过了另一只蚂蚁,因为相撞之后两只蚂蚁都感冒了,掉不掉头其实无所谓,毕竟都感冒了,这样的话这题就简单多了。第一只蚂蚁不管方向朝哪里,只要它右边的蚂蚁向左走就可能碰撞感染,同样,第一只蚂蚁左边的蚂蚁只要朝右边走也可能被感染,这样就很容易得到。这些蚂蚁中,有 1 只蚂蚁感冒了。原创 2023-01-13 20:03:44 · 121 阅读 · 0 评论 -
献给阿尔吉侬的花束
阿尔吉侬是一只聪明又慵懒的小白鼠,它最擅长的就是走各种各样的迷宫。今天它要挑战一个非常大的迷宫,研究员们为了鼓励阿尔吉侬尽快到达终点,就在终点放了一块阿尔吉侬最喜欢的奶酪。现在研究员们想知道,如果阿尔吉侬足够聪明,它最少需要多少时间就能吃到奶酪。迷宫用一个 R×C 的字符矩阵来表示。字符 S 表示阿尔吉侬所在的位置,字符 E 表示奶酪所在的位置,字符 # 表示墙壁,字符 . 表示可以通行。阿尔吉侬在 1 个单位时间内可以从当前的位置走到它上下左右四个方向上的任意一个位置,但不能走出地图边界。原创 2023-01-10 15:13:22 · 246 阅读 · 1 评论 -
日志统计(每日一题)
具体来说,如果存在某个时刻 T 满足该帖在 [T,T+D) 这段时间内(注意是左闭右开区间)收到不少于 K 个赞,该帖就曾是”热帖”。如果一个帖子曾在任意一个长度为 D 的时间段内收到不少于 K 个赞,小明就认为这个帖子曾是”热帖”。给定日志,请你帮助小明统计出所有曾是”热帖”的帖子编号。表示在 ts 时刻编号 id 的帖子收到一个”赞”。现在小明想统计有哪些帖子曾经是”热帖”。第一行包含三个整数 N,D,K。按从小到大的顺序输出热帖 id。原创 2023-01-10 15:08:26 · 249 阅读 · 1 评论 -
买不到的数目
你可以用计算机测试一下,在这种包装情况下,最大不能买到的数量是17。就是指最大不能买的数目,也就是我们最后的输出,循环结束,便可直接输出。本题的要求就是在已知两个包装的数量时,求最大不能组合出的数字。当然有些糖果数目是无法组合出来的,比如要买 10 颗糖。小朋友来买糖的时候,他就用这两种包装来组合。两个正整数 n,m,表示每种包装中糖的颗数。大于17的任何数字都可以用4和7组合出来。开始,不断往前走,每走到一个数,都要看看。一个正整数,表示最大不能买到的糖数。小明开了一家糖果店。原创 2023-01-08 19:07:45 · 83 阅读 · 3 评论 -
n-皇后问题
n−皇后问题是指将 n 个皇后放在 n×n 的国际象棋棋盘上,使得皇后不能相互攻击到,即任意两个皇后都不能处于同一行、同一列或同一斜线上。每个解决方案占 n 行,每行输出一个长度为 n 的字符串,用来表示完整的棋盘状态。其中 . 表示某一个位置的方格状态为空,Q 表示某一个位置的方格上摆着皇后。行放好棋子,也就是整个棋盘放好了棋子,也就是得到了一种解,也就是递归结束。如果 r行i列的对角线,反对角线上都没有棋子,即。表示 r行i列处,所在的对角线上有没有棋子,表示 r行i列处,所在的反对角线上有没有棋子,原创 2023-01-08 18:59:52 · 101 阅读 · 1 评论 -
数字三角形
给定一个如下图所示的数字三角形,从顶部出发,在每一结点可以选择移动至其左下方的结点或移动至其右下方的结点,一直走到底层,要求找出一条路径,使路径上的数字的和最大。输入格式第一行包含整数 n,表示数字三角形的层数。接下来 n 行,每行包含若干整数,其中第 i 行表示数字三角形第 i 层包含的整数。输出格式输出一个整数,表示最大的路径数字和。数据范围1≤n≤500,−10000≤三角形中的整数≤10000输入样例:573 88 1 02 7 4 4。原创 2023-01-07 00:57:05 · 113 阅读 · 1 评论 -
连通块中点的数量
给定一个包含 n 个点(编号为 1∼n)的无向图,初始时图中没有边。现在要进行 m 个操作,操作共有三种:C a b,在点 a 和点 b 之间连一条边,a 和 b 可能相等;Q1 a b,询问点 a 和点 b 是否在同一个连通块中,a 和 b 可能相等;Q2 a,询问点 a 所在连通块中点的数量;输入格式第一行输入整数 n 和 m。接下来 m 行,每行包含一个操作指令,指令为 C a b,Q1 a b 或 Q2 a 中的一种。输出格式。原创 2023-01-07 00:44:00 · 107 阅读 · 1 评论 -
判断子序列
给定一个长度为 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 序列是 b 序列的子序列,输出一行 Yes。原创 2022-12-25 13:09:23 · 358 阅读 · 5 评论 -
数组元素的目标和
给定两个升序排序的有序数组 A 和 B,以及一个目标值 x。数组下标从 0 开始。请你求出满足 A[i]+B[j]=x 的数对 (i,j)。数据保证有唯一解。输入格式第一行包含三个整数 n,m,x,分别表示 A 的长度,B 的长度以及目标值 x。第二行包含 n 个整数,表示数组 A。第三行包含 m 个整数,表示数组 B。输出格式共一行,包含两个整数 i 和 j。数据范围数组长度不超过 105。同一数组内元素各不相同。1≤数组元素≤109输入样例:4 5 6。原创 2022-12-25 12:26:54 · 98 阅读 · 1 评论 -
最长连续不重复子序列
给定一个长度为 n 的整数序列,请找出最长的不包含重复的数的连续区间,输出它的长度。第二行包含 n 个整数(均在 0∼105 范围内),表示整数序列。共一行,包含一个整数,表示最长的不包含重复的数的连续区间的长度。第一行包含整数 n。原创 2022-12-23 12:35:27 · 442 阅读 · 4 评论 -
合并集合(并查集)
对于每个询问指令 Q a b,都要输出一个结果,如果 a 和 b 在同一集合内,则输出 Yes,否则输出 No。M a b,将编号为 a 和 b 的两个数所在的集合合并,如果两个数已经在同一个集合中,则忽略这个操作;接下来 m 行,每行包含一个操作指令,指令为 M a b 或 Q a b 中的一种。一共有 n 个数,编号是 1∼n,最开始每个数各自在一个集合中。Q a b,询问编号为 a 和 b 的两个数是否在同一个集合中;第一行输入整数 n 和 m。原创 2022-12-23 12:33:31 · 223 阅读 · 5 评论 -
排队打水(Java)
有 n 个人排队到 1 个水龙头处打水,第 i 个人装满水桶所需的时间是 ti,请问如何安排他们的打水顺序才能使所有人的等待时间之和最小?第二行包含 n 个整数,其中第 i 个整数表示第 i 个人装满水桶所花费的时间 ti。输出一个整数,表示最小的等待时间之和。第一行包含整数 n。原创 2022-12-23 00:00:04 · 266 阅读 · 1 评论 -
滑动窗口(C++,Java)
给定一个大小为 n≤106 的数组。有一个大小为 k 的滑动窗口,它从数组的最左边移动到最右边。你只能在窗口中看到 k 个数字。每次滑动窗口向右移动一个位置。以下是一个例子:该数组为 [1 3 -1 -3 5 3 6 7],k 为 3。窗口位置 最小值 最大值你的任务是确定滑动窗口位于每个位置时,窗口中的最大值和最小值。输入格式输入包含两行。第一行包含两个整数 n 和 k,分别代表数组长度和滑动窗口的长度。第二行有 n 个整数,代表数组的具体数值。原创 2022-12-22 23:57:05 · 141 阅读 · 1 评论 -
单链表(Java每日一题)
实现一个单链表,链表初始为空,支持三种操作:向链表头插入一个数;删除第 k 个插入的数后面的数;在第 k 个插入的数后插入一个数。现在要对该链表进行 M 次操作,进行完所有操作后,从头到尾输出整个链表。注意:题目中第 k 个插入的数并不是指当前链表的第 k 个数。例如操作过程中一共插入了 n 个数,则按照插入的时间顺序,这 n 个数依次为:第 1 个插入的数,第 2 个插入的数,…第 n 个插入的数。输入格式第一行包含整数 M,表示操作次数。原创 2022-12-21 20:09:39 · 128 阅读 · 1 评论 -
走迷宫(BFS)
给定一个 n×m 的二维整数数组,用来表示一个迷宫,数组中只包含 0 或 1,其中 0 表示可以走的路,1 表示不可通过的墙壁。最初,有一个人位于左上角 (1,1) 处,已知该人每次可以向上、下、左、右任意一个方向移动一个位置。请问,该人从左上角移动至右下角 (n,m) 处,至少需要移动多少次。数据保证 (1,1) 处和 (n,m) 处的数字为 0,且一定至少存在一条通路。输入格式第一行包含两个整数 n 和 m。接下来 n 行,每行包含 m 个整数(0 或 1),表示完整的二维数组迷宫。原创 2022-12-21 20:05:58 · 124 阅读 · 1 评论 -
排列数字(Java每日一题)
给定一个整数 n,将数字 1∼n 排成一排,将会有很多种排列方法。现在,请你按照字典序将所有的排列方法输出。按字典序输出所有排列方案,每个方案占一行。共一行,包含一个整数 n。原创 2022-12-20 21:46:46 · 458 阅读 · 1 评论 -
子矩阵的和
输入一个 n 行 m 列的整数矩阵,再输入 q 个询问,每个询问包含四个整数 x1,y1,x2,y2,表示一个子矩阵的左上角坐标和右下角坐标。接下来 q 行,每行包含四个整数 x1,y1,x2,y2,表示一组询问。接下来 n 行,每行包含 m 个整数,表示整数矩阵。对于每个询问输出子矩阵中所有数的和。共 q 行,每行输出一个询问的结果。−1000≤矩阵内元素的值≤1000。第一行包含三个整数 n,m,q。绿色矩形的面积 = 整个外围面积。+ 重复减去的红色面积。原创 2022-12-20 21:37:12 · 121 阅读 · 1 评论 -
一篇文章讲明白差分
输入一个长度为 n 的整数序列。接下来输入 m 个操作,每个操作包含三个整数 l,r,c,表示将序列中 [l,r] 之间的每个数加上 c。请你输出进行完所有操作后的序列。输入格式第一行包含两个整数 n 和 m。第二行包含 n 个整数,表示整数序列。接下来 m 行,每行包含三个整数 l,r,c,表示一个操作。输出格式共一行,包含 n 个整数,表示最终序列。数据范围1≤l≤r≤n,−1000≤整数序列中元素的值≤1000输入样例:6 31 3 13 5 1。原创 2022-12-08 16:55:32 · 100 阅读 · 1 评论 -
合并果子(优先级队列)
在一个果园里,达达已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆。达达决定把所有的果子合成一堆。每一次合并,达达可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和。可以看出,所有的果子经过 n−1 次合并之后,就只剩下一堆了。达达在合并果子时总共消耗的体力等于每次合并所耗体力之和。因为还要花大力气把这些果子搬回家,所以达达在合并果子时要尽可能地节省体力。假定每个果子重量都为 1,并且已知果子的种类数和每种果子的数目,你的任务是设计出合并的次序方案,使达达耗费的体力最少,并输出这个最小的原创 2022-12-07 10:47:51 · 299 阅读 · 3 评论 -
二进制中1的个数
给定一个长度为 n 的数列,请你求出数列中每个数的二进制表示中 1 的个数。输入格式第一行包含整数 n。第二行包含 n 个整数,表示整个数列。输出格式共一行,包含 n 个整数,其中的第 i 个数表示数列中的第 i 个数的二进制表示中 1 的个数。数据范围1≤n≤100000,0≤数列中元素的值≤109输入样例:51 2 3 4 5输出样例:1 1 2 1 2提交代码原创 2022-12-06 16:05:00 · 161 阅读 · 4 评论 -
统计单词数
统计单词数是一种非常常见的算法题,在算法比赛之中也经常出现,作为一名曾经获得过蓝桥杯国家二等奖的,稍微懂一点点算法的博主(本质还是一名Java博主),我采取两种方式进行讲解。题目:比如统计如下这段字符串中的每个单词数量:.运行结果原创 2022-12-04 23:19:03 · 840 阅读 · 0 评论 -
递归实现指数型枚举
从 1∼n 这 n 个整数中随机选取任意多个,输出所有可能的选择方案。输入格式输入一个整数 n。输出格式每行输出一种方案。同一行内的数必须升序排列,相邻两个数用恰好 1 个空格隔开。对于没有选任何数的方案,输出空行。本题有自定义校验器(SPJ),各行(不同方案)之间的顺序任意。数据范围1≤n≤15输入样例:3输出样例:322 311 31 21 2 3提交代码原创 2022-12-03 23:39:27 · 162 阅读 · 0 评论 -
简单斐波那契
以下数列 0 1 1 2 3 5 8 13 21 … 被称为斐波纳契数列。这个数列从第 3 项开始,每一项都等于前两项之和。输入一个整数 N,请你输出这个序列的前 N 项。输入格式一个整数 N。输出格式在一行中输出斐波那契数列的前 N 项,数字之间用空格隔开。数据范围0原创 2022-12-03 23:36:25 · 337 阅读 · 0 评论 -
快速幂讲解
快速幂原创 2022-12-03 01:31:23 · 92 阅读 · 0 评论 -
前缀和讲解
原数组: a[1], a[2], a[3], a[4], a[5], …前缀和: S[i] = a[1] + a[2] + a[3] + …接下来 m 行,每行包含两个整数 l 和 r,表示一个询问的区间范围。对于每个询问,输出原序列中从第 l 个数到第 r 个数的和。求 [l, r]中的和, 即为 S[r] - S[l-1]接下来再输入 m 个询问,每个询问输入一对 l,r。共 m 行,每行输出一个询问的结果。输入一个长度为 n 的整数序列。前缀和 Si为数组的前 i项和。快速求出元素组中某段区间的和。原创 2022-12-03 01:27:16 · 99 阅读 · 0 评论 -
数的范围(考查二分)
对于每个查询,返回一个元素 k 的起始位置和终止位置(位置从 0 开始计数)。第二行包含 n 个整数(均在 1∼10000 范围内),表示完整数组。给定一个按照升序排列的长度为 n 的整数数组,以及 q 个查询。共 q 行,每行包含两个整数,表示所求元素的起始位置和终止位置。接下来 q 行,每行包含一个整数 k,表示一个询问元素。第一行包含整数 n 和 q,表示数组长度和询问个数。如果数组中不存在该元素,则返回 -1 -1。如果数组中不存在该元素,则返回 -1 -1。原创 2022-12-02 00:04:57 · 125 阅读 · 0 评论 -
模拟栈(训练栈的知识)
其中,empty 操作的查询结果为 YES 或 NO,query 操作的查询结果为一个整数,表示栈顶元素的值。接下来 M 行,每行包含一个操作命令,操作命令为 push x,pop,empty,query 中的一种。现在要对栈进行 M 个操作,其中的每个操作 3 和操作 4 都要输出相应的结果。对于每个 empty 和 query 操作都要输出一个查询结果,每个结果占一行。push x – 向栈顶插入一个数 x;第一行包含整数 M,表示操作次数。pop – 从栈顶弹出一个数;query – 查询栈顶元素。原创 2022-12-01 23:55:00 · 205 阅读 · 0 评论 -
筛法求质数
给定一个正整数 n,请你求出 1∼n 中质数的个数。原创 2022-12-01 00:27:53 · 542 阅读 · 0 评论 -
试除法求约数
给定 n 个正整数 ai,对于每个整数 ai,请你按照从小到大的顺序输出它的所有约数。输出共 n 行,其中第 i 行输出第 i 个整数 ai 的所有约数。接下来 n 行,每行包含一个整数 ai。第一行包含整数 n。原创 2022-12-01 00:08:39 · 125 阅读 · 0 评论 -
试除法判定质数
共 n 行,其中第 i 行输出第 i 个正整数 ai 是否为质数,是则输出 Yes,否则输出 No。给定 n 个正整数 ai,判定每个数是否是质数。接下来 n 行,每行包含一个正整数 ai。第一行包含整数 n。原创 2022-11-29 11:01:16 · 107 阅读 · 0 评论