- 博客(10)
- 收藏
- 关注
原创 可见的山峰对数量(单调栈)
可见的山峰对数量(单调栈) 问题重述: 一个不含有负数的数组可以代表一圈环形山,每个位置的值代表山的高度。比如,{3,1,2,4,5},{4,5,3,1,2}或{1,2,4,5,3}都代表同样结构的环形山。3->1->2->4->5->3 方向叫作 next 方向(逆时针),3->5->4->2->1->3 方向叫作 last 方向(顺时针)。 山峰 A 和 山峰 B 能够相互看见的条件为: 如果 A 和 B 是同一座山,认为不能相互看见。 如果
2021-09-05 13:26:24
331
原创 最大值减去最小值小于等于num的子数组数量
最大值减去最小值小于等于num的子数组数量 问题重述: 给定数组 arr 和整数 num,共返回有多少个子数组满足如下情况: max(arr[i…j]) - min(arr[i…j]) <= num max(arr[i…j])表示子数组arr[i…j]中的最大值,min[arr[i…j])表示子数组arr[i…j]中的最小值。 输入描述: 第一行输入两个数 n 和 num,其中 n 表示数组 arr 的长度 第二行输入n个整数XiX_iXi,表示数组arr中的每个元素 输出描述: 输出给定数组中满足
2021-08-16 15:18:34
421
原创 求最大矩形(单调栈)
求最大矩形 问题重述: 给定一个整型矩阵map,其中的值只有0和1两种,求其中全是1的所有矩形区域中, 最大的矩形区域为1的数量。 例如: 1 1 1 0 其中,最大的矩形区域有3个1,所以返回3。 再如: 1 0 1 1 1 1 1 1 1 1 1 0 其中,最大的矩形区域有6个1,所以返回6 问题分析: 看到这个问题,我们应该第一时间想到使用单调栈,使用单调栈找到左右比当前高度低的最低位置,然后这之间的矩形就是最大的,如果再往左或往右高度都会小于当前高度,所以不行。我们在求最大矩形时,有可能最大的并不包
2021-08-07 19:35:53
417
原创 求元素左右较小值(单调栈)
求元素左右小于本身的值 问题重述: 给你一个整数数组 arr,求得每个元素左右小于其本身且距离它最近的元素,若不存在给定-1,返回所有位置的对应信息 示例 1: 输入:arr = [3, 4, 1, 3, 5, 2, 7] 输出: -1 2 0 2 -1 -1 2 5 3 5 2 -1 5 -1 输入: repeatArr = {3, 4, 1, 5, 3, 5, 2, 7} 输出: -1 2 0 2 -1 -1 2 4 2 6 4 6 2 -1 6 -1 问题分析: 输入数组有两种可能,一种是不重复的
2021-08-01 10:57:32
237
原创 生成窗口最大值数组
生成窗口最大数组(优先队列、单调队列) 问题重述: 给你一个整数数组 arr,有一个大小为 w 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。返回滑动窗口中的最大值 示例 1: 输入:arr = [1,3,-1,-3,5,3,6,7], k = 3 输出:[3,3,5,5,6,7] 解释: 滑动窗口的位置 最大值 --------------- ----- [1 3 -1] -3
2021-07-28 20:51:56
194
原创 阶乘和(二进制枚举、dfs枚举)
3481. 阶乘的和 问题重述: 给定一个非负整数 n,请你判断是否存在一些整数 xi,能够使得 n=∑1≤i≤txi!,其中 t≥1,xi≥0,xi=xj iff i=j。 iff 表示当且仅当。 输入格式 输入包含多组测试数据。 每组数据占一行,包含一个非负整数 n。 最后一行是一个负数,表示输入结束,无需处理。 输出格式 每组数据输出一行结果,如果 n 能表示为若干数的阶乘之和,则输出 YES,否则输出 NO。 数据范围 0≤n≤106, 每组输入最多包含 100 组数据。 输入样例: 9 -1 输
2021-05-29 15:39:34
373
原创 Java在算法题中的输入问题
Java在算法题中的输入问题 在写算法题的时候,经常因为数据的输入问题而导致卡壳,其中最常见的就是数据输入无法结束。 1.给定范围,确定输入几个数据 直接使用普通的Scanner输入数据范围,然后使用for循环输入后续数据。 例如: Scanner scanner = new Scanner(System.in); //输入数据的范围 int n = scanner.nextInt(); for(int i = 0;i < n;i++){ arrays[i] = scanner.ne
2021-05-24 21:21:00
629
原创 星期几(模拟)
3489. 星期几 问题重述: 已知 11 年 11 月 11 日是星期一。 现在给定一个日期,请你判断是星期几。 注意闰年的 22 月有 2929 天。 满足下面条件之一的是闰年: 年份是 44 的整数倍,而且不是 100100 的整数倍; 年份是 400400 的整数倍。 输入格式 输入包含多组测试数据。 每组数据占一行,包含一个整数 dd 表示日,一个字符串 mm 表示月,一个整数 yy 表示年。 月份 1∼121∼12,依次如下所示: January, February, March, Apri
2021-05-24 20:33:14
529
原创 最小路径和(DFS)
3502. 不同路径数 问题重述: 给定一个 n×m的二维矩阵,其中的每个元素都是一个 [1,9][1,9] 之间的正整数。 从矩阵中的任意位置出发,每次可以沿上下左右四个方向前进一步,走过的位置可以重复走。 走了 k次后,经过的元素会构成一个 (k+1) 位数。 请求出一共可以走出多少个不同的 (k+1) 位数。 输入格式 第一行包含三个整数 n,m,k。 接下来 n 行,每行包含 m 个空格隔开的整数,表示给定矩阵。 输出格式 输出一个整数,表示可以走出的不同 (k+1) 位数的个数。 数据范围 对于
2021-05-24 16:39:58
659
原创 最大和(双指针、前缀和)
3493. 最大的和 问题重述: 给定一个长度为 n的正整数数列 a1,a2,…,an。 初始时,数列中的每个元素要么处于可选状态,要么处于不可选状态。 你可以选择一个长度恰好为 k 的区间 [i,i+k−1],使得 ai∼ai+k−1 这 k 个元素的状态全部变为可选。 请问,在经过此操作后,所有处于可选状态的元素之和最大是多少。 输入格式 第一行包含两个整数 n和 k。 第二行包含 n个整数 ai。 第三行包含一个长度为 n 的 01 序列,如果第 i个数为 1,表示 ai 的初始状态为可选,如果第 i
2021-05-18 10:32:36
332
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅