
算法练习
文章平均质量分 69
@u@
这个作者很懒,什么都没留下…
展开
-
【算法练习】498. 对角线遍历(模拟)
对角线遍历(模拟)原创 2022-06-14 10:07:05 · 169 阅读 · 0 评论 -
【第十三届蓝桥杯国赛训练营第三周——图论+数学】
题目帖:https://bbs.youkuaiyun.com/topics/606752897图论+数学🥩A 扫雷游戏(简单)🥩A 扫雷游戏(简单)签到题,千万别每一个格子遍历八个方向,遍历地雷的八个方向就行。import java.util.*;import java.io.*;public class Main { static BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(System.out));原创 2022-05-28 22:19:43 · 967 阅读 · 2 评论 -
【算法练习】467. 环绕字符串中唯一的子字符串(线性DP)
单独提出这道题的原因,没有想到这种状态…dp[i]表示,表示以’a’、‘b’…‘z’,结尾的、最长的、子串长度。最终的答案=∑azdp[char]\sum_{a}^{z}dp[char]∑azdp[char],就是所有字母结尾的最长子串的长度求累加和。由于最后是累加,所以前面的所有可能情况都会考虑进来,不会漏掉,也不会多算,十分巧妙。class Solution { public int findSubstringInWraproundString(String p) { .原创 2022-05-25 21:01:16 · 172 阅读 · 0 评论 -
【第十三届蓝桥杯国赛训练营第二周——搜索】
🥞A 小猫爬山(简单)本题可以站在缆车的角度枚举猫,也可以站在猫的角度枚举已有的缆车。这里采用站在猫的角度的方法。对每只猫,枚举它可能放的、已有的缆车。如果缆车不够放,那就开新的缆车。搜索问题,还需要考虑的就是回溯,什么地方回溯,为什么要回溯。本题中回溯是因为:不论当前缆车是否可以放下,都可以让猫咪不放这个缆车,而选择后面的缆车,这样就形成了多分枝。import java.util.*;import java.io.*;public class Main { static Buff原创 2022-05-16 22:40:39 · 1517 阅读 · 0 评论 -
【2020年蓝桥杯Java-B组国赛题解】
2020年蓝桥杯Java-B组国赛🍡 A 美丽的2(水)🍯 B 扩散(水)🍡 A 美丽的2(水)【问题描述】小蓝特别喜欢 2,今年是公元 2020 年,他特别高兴。他很好奇,在公元 1 年到公元 2020 年(包含)中,有多少个年份的数位中包含数字 2?答案:563🍯 B 扩散(水)【问题描述】小蓝在一张无限大的特殊画布上作画。这张画布可以看成一个方格图,每个格子可以用一个二维的整数坐标表示。小蓝在画布上首先点了一下几个点:(0, 0), (2020, 11), (11, 14), (20原创 2022-05-15 20:37:16 · 1374 阅读 · 0 评论 -
【算法练习】最大和、染色时间
🍻最大和属于走楼梯、跳格子问题的升级版,通过另一种方式告诉你当前格子能够跳到的最远距离,究其本质,还是一样的。import java.util.*;import java.io.*;public class Main { static BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(System.out)); static BufferedReader reader = new BufferedR原创 2022-05-15 17:09:01 · 426 阅读 · 0 评论 -
【第十三届蓝桥杯国赛训练营第一周——动态规划】
🍟A 骰子的点数(简单)dp[i][j],表示有 i 个骰子,掷出点数范围为[j…6j]的每个点数的掷法,那么对于dp[1],所有点数都只有一种方法。当n=2时,如果要掷出点数3,组合方式=1 + 2 / 2 + 1,就两种,我们假设现在已经掷了一个骰子,点数为k,那么我们还需要去看另外一个骰子的情况,因为要让点数凑成3,所以就看dp[i - 1][3 - k],就是说看一个骰子掷出3-k点数的种类数。也就是说,站在最后一个骰子的角度去考虑问题,考虑前面的骰子能够为这个骰子带来什么?class S原创 2022-05-09 12:12:53 · 1033 阅读 · 2 评论 -
【2021年蓝桥杯Java-B组国赛题解】
2021年蓝桥杯Java-B组国赛原创 2022-05-07 22:29:55 · 1342 阅读 · 2 评论 -
【算法练习】迷宫与陷阱(多维度BFS)
import java.io.*;import java.util.*;class node { int x, y, k; node(int x, int y, int k) { this.x = x; this.y = y; this.k = k; }}public class Main { static BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); ..原创 2022-04-08 13:14:37 · 670 阅读 · 0 评论 -
【算法练习】分考场
对于每个学生,找到能够放下该学生的教室,如果找不到就新开一个教室,直到把该学生安顿下来,当然这个学生并不是非得放到当前教室,也可以放到后面的教室,这时就需要回溯。import java.util.*;import java.io.*;public class Main { static boolean[][] map = new boolean[110][110]; static LinkedList<Integer>[] list = new LinkedList[..原创 2022-04-07 21:07:39 · 370 阅读 · 0 评论 -
【算法练习】杂题选讲(跳石头、蓝肽子序列、二倍数对数组、阶乘约数、发现环、公约数)
一、跳石头(二分)又是没看出来的二分,二分题目藏的好深啊,主要是难在二分的check函数上,不好写。import java.util.*;import java.io.*;public class Main { static int[] dist; static int n, m; public static void main(String[] args) throws IOException { Scanner scanner = new Scann原创 2022-04-01 16:16:12 · 400 阅读 · 0 评论 -
【算法练习】Acwing第44周周赛
Acwing第44周周赛二、最短路径(中等)三、合适数对(困难)二、最短路径(中等)题目的第一个条件很好保证,关键在于第二个条件,如何保证从起点到终点,是最短的安全路径(之一)?考虑下面这种情况:虚线处代表距离为1,上面这种走的形式肯定不是最优的,因为明明可以走虚线,它非得绕一圈再走过去,这种情况怎么判断?很简单,对于当前点,遍历其四个方向,看周围已经访问过的点的个数是否 > 1,1是因为来的路径肯定会被访问,> 1例如等于2时,就说明当前点可以由其它更近点转移而来,也就代表给出的原创 2022-03-27 10:35:14 · 613 阅读 · 0 评论 -
【算法练习】蓝桥杯C++ AB组辅导课题单:第十讲(Java解答版)
疑难杂题一、修改数组(中等)二、倍数问题(中等)三、斐波那契(中等)四、距离(中等)五、剪格子(中等)一、修改数组(中等)import java.util.*;import java.io.*;public class Main { static BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); static BufferedWriter writer = new Buffe原创 2022-03-26 14:58:05 · 271 阅读 · 0 评论 -
【算法练习】杂题混讲三:Acwing + 蓝桥杯练习 + 青云杯题目
1373、两只奶牛模拟牛、农民的移动import java.util.*;import java.io.*;public class Main { static BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); static BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(System.ou原创 2022-03-26 10:44:30 · 1031 阅读 · 0 评论 -
【算法练习】蓝桥杯C++ AB组辅导课题单:第九讲(Java解答版)
蓝桥杯C++ AB组辅导课题单:第九讲一、复杂DP1050、鸣人的影分身(中等)鉴于近几年蓝桥杯DP题目数目增加,一定要对DP有较高的熟练度,并且能够秒杀经典题目。一、复杂DP1050、鸣人的影分身(中等)注意N是包含鸣人自己在内的,所以不存在000的情况...原创 2022-03-24 16:53:15 · 1770 阅读 · 0 评论 -
【算法练习】Acwing第37周周赛
第一题不是太难或者太恶心人的情况下,一般不会写哦。二、截断数组(中等)(二分、哈希表、双指针)这个数组有两个拆分点,也可以只有一个,我们可以固定第二个拆分点,去找第一个拆分点,使得s1 = s3,因为题目中说了每个元素都>=1,所以第一个拆分点指针往后走s1的区间和肯定是递增的,所以使得s1 = s3的第一个拆分点指针是唯一的!第二个点固定了,要找第一个点,而且还是递增的关系,显然第一个做法:二分!这样我们便利后面指针位置需要O(n),二分需要O(logn),总共也就是O(nlogn),.原创 2022-03-23 12:37:40 · 272 阅读 · 0 评论 -
【算法练习】SWPU第二届天梯选拔赛暨蓝桥杯训练赛(Java版)
SWPU第二届天梯选拔赛暨蓝桥杯训练赛(Java版)一、素数送温暖二、睡懒觉三、数字找朋友四、爬虫数据解析五、加密算法六、简单的数学公式七、橘子的秘密临近蓝桥杯,多多磨练自己心态,多打打校赛~一、素数送温暖直接从x+1开始算素数即可import java.util.Arrays;import java.util.Scanner;public class Main { static boolean check(int x) { for (int i = 2; i <= (int)(原创 2022-03-22 16:55:05 · 399 阅读 · 0 评论 -
【纪念第一次AK(泪目)】第一届ACC(AcWing Cup)全国高校联赛(初赛)(Java版)
ACC一、4376. 数圈圈(简单)二、4377. 农田灌溉(中等)三、4378. 选取数对(困难)一、4376. 数圈圈(简单)暴力就行,唯一要注意的是Java的Integer.toString(),会把十六进制的A、B、C…转成小写!!!(被罚时了)import java.util.*;import java.io.*;public class Main { static BufferedReader reader = new BufferedReader(new InputStream原创 2022-03-20 20:47:15 · 690 阅读 · 0 评论 -
【算法练习】Acwing第43周周赛
Acwing第43周周赛一、三元组(简单、暴力)二、两个数列(中等、数学推导)三、合适数对(困难、离散化、树状数组)这周周赛拉了呀,后面两题都没AC...一、三元组(简单、暴力)import java.util.*;import java.io.*;public class Main { static BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); static BufferedWr原创 2022-03-20 10:20:02 · 720 阅读 · 0 评论 -
【算法练习】杂题混讲二:Acwing + 蓝桥杯练习(背包系列问题)
考虑到蓝桥杯或者一些DP问题,是通过背包问题转换而来,所以这一次练习全以DP背包问题为主,旨在将DP问题讲透彻、讲清楚。一、01背包经典的DP背包问题,这个不用多说。import java.util.*;import java.io.*;public class Main { static BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); static BufferedWriter l原创 2022-03-19 18:06:11 · 263 阅读 · 0 评论 -
【算法练习】杂题混讲一:Acwing + 蓝桥杯练习
一、牛的学术圈Ⅰ(二分)如果不考虑参数L的影响,那就是一个纯纯的二分答案,问题在于如何处理参数L?,仔细读题,题目说了总共至多引用L篇,每篇论文至多引用1次,至多的意思是说可以引用也可以不引用。 那我们就先不考虑L的影响,遍历所有论文,只要论文的引用次数比二分答案(指数),大或等于或者比答案小1都可以算满足,然后统计出来看总的>=h指数的论文篇数是否达到了h篇(>=),是不是很简单?这个时候再考虑L的影响,L无非是对论文引用+1的次数有限制,那我们只要在统计论文篇数时取L和之前和答案差1的原创 2022-03-18 14:44:40 · 1033 阅读 · 0 评论 -
【算法练习】蓝桥杯日常练习系统(礼物、数的潜能、娜神平衡、粘木棍、车的放置、最大分解、Substrings、线性筛、乘积最大、递增三元组、倍数问题、结账问题、无聊的逗)
一、礼物(前缀和 + 二分答案)对石子个数进行二分,然后去check当前石子数是否满足要求,一直逼近石子的最大值即可,关键在于要处理好前缀和的下标关系。例如,现在从 i 的位置开始划分,取k个石子,前面k个石子的重量 = preSum[i] - preSum[i - k],后面k个石子的重量 = preSum[i + k] - preSum[i]。另外就是用BufferReader加快读取速度。import java.io.BufferedReader;import java.io.IOExcep原创 2022-03-15 21:39:46 · 1669 阅读 · 0 评论 -
【算法练习】排排队(两两交换)
意思就是给你一个身高数组,两两可以调换,问如何调换变成目标身高数组?要输出在这个过程中的调换过程。首先,无解的情况很好判断,只需要看已有身高数组和目标身高数组的元素个数是否相同(可以排序后一个个元素比较,也可以直接每位计数)。有解的情况呢?从暴力角度出发,如果当前已有身高数组的当前元素与目标身高数组的当前元素不匹配,那就调换当前元素和已有身高数组的后面元素,直到满足目标身高数组要求即可。其实这问题,暴力就出来了,只要一直保证当前遍历的元素被调换为正确元素即可,自己一直在想奇特的方法,属于是脑子抽了..原创 2022-03-13 22:03:02 · 1108 阅读 · 0 评论 -
【算法练习】Acwing第42周周赛
【算法练习】Acwing第41周周赛一、最小值(简单)二、出现次数(中等)三、满二叉树等长路径(困难)又又卡在了最后一题…(第二题卡了太多时间了,第二题的感觉就是很熟悉,但是又不知道哪里熟悉,搞半天没做出来,最后想了个简单方法)一、最小值(简单)就是打卡的import java.io.*;import java.util.*;public class Main { static BufferedReader in = new BufferedReader(new InputStreamRea原创 2022-03-12 21:06:57 · 604 阅读 · 0 评论 -
【算法练习】Acwing第41周周赛
Acwing第41周周赛前两道题都比较简单,自己在第三道题卡了很久…原创 2022-03-12 09:40:26 · 201 阅读 · 0 评论 -
【算法练习】蓝桥杯训练二:
蓝桥杯训练二一、乘积最大(简单、线性DP)一、乘积最大(简单、线性DP)考虑限制条件:数字串的长度N 和 乘号个数K。用dp[i][j]来表示字符串中前 i 个数,在使用k个乘号的情况下的最大乘积。那么dp[i][0] = 这个字符串构成的数,我们要找的答案=dp[N - 1][K - 1]。dp[i][j]怎么得到?我们可以对最后一个乘号:考虑最后一个乘号,前面还有 j - 1 个乘号,这 j - 1 个乘号,至少需要 j 个数来乘,所以最后一个乘号的枚举位置,应该从 j 开始,枚举到 i -原创 2022-03-11 14:05:39 · 820 阅读 · 0 评论 -
【算法练习】蓝桥杯C++ AB组辅导课题单:第一、二讲(Java解答版)(已获Java-B组国二)
反正听y哥说刷完肯定进国赛,我就试试~蓝桥杯C++ AB组辅导课提单(Java解答版)一、第一讲 递归与递推92. 递归实现指数型枚举(简单)94. 递归实现排列型枚举(简单)717. 简单斐波那契(中等)95、费解的开关(中等)(状态压缩—枚举)93. 递归实现组合型枚举(简单)1209、带分数(简单)一、第一讲 递归与递推92. 递归实现指数型枚举(简单)注意本题是求解组合!!import java.util.LinkedList;import java.util.Scanner;pu原创 2022-03-04 22:11:28 · 8653 阅读 · 2 评论 -
【算法练习】kuangbin-Acwing(简单搜索)
kuangbin-Acwing系列文章,记录了自己在练习过程中的想法和体会,可能不具有太大价值,大家选择性阅读。kuangbin-Acwing一、棋盘问题(DFS-简单)二、地牢大师(BFS-简单)三、抓住那头牛(BFS-简单)四、费解的开关(状态压缩枚举-中等)五、翻转(同上)六、找倍数(BFS-简单)七、质数路径(BFS-简单)八、洗牌(BFS-简单)九、罐子(BFS-简单)十、点火游戏(BFS-简单)一、棋盘问题(DFS-简单)因为放了一行,那当前行就不能放了,可以以行为元素进行搜索,每次遍历原创 2022-03-02 21:03:13 · 316 阅读 · 0 评论 -
【算法练习】LeetCode每日一题(三月)
日常刷题记录一、Z字形变换(中等)二、单词接龙(困难)一、Z字形变换(中等)找规律的题,一定要先找到他的周期,用把下标对周期取余,就能很快做出判断。class Solution { public String convert(String s, int numRows) { if (s.length() == 1 || numRows == 1 || numRows >= s.length()) return s; char[] tmp = s.toCh原创 2022-03-01 19:01:44 · 285 阅读 · 0 评论 -
【算法练习】日常刷题记录(贪心、SPFA改编、状态压缩、状态压缩DP)
日常刷题记录一、最优除法(中等)二、K站中转内最便宜的航班(中等)一、最优除法(中等)考虑数组中每个元素大小都>0,且对于最普通,不添加括号的情况,第0个数一定是分子,而第1个数一定是分母,但后面的数不一定,那我们只需要让分子足够大即可,那就是让第1个数后面的数全部成为分子。class Solution { public String optimalDivision(int[] nums) { StringBuilder sb = new StringBuilde原创 2022-02-28 15:22:46 · 303 阅读 · 0 评论 -
【算法练习】日常刷题记录(线性筛、欧拉函数、LeetCode题)
日常刷题记录欧拉筛、线性筛欧拉函数构造限制重复的字符串(中等)统计可以被k整除的下标对数目(困难)欧拉筛、线性筛方法:一个合数被分解为最小质因数*自然数,以最小质因数进行筛选,一旦是合数,且找到了最小质因子,那就停止往下找,以提高效率。public class Main { public static void main(String[] args) { int n = 1000; int[] prime = new int[n]; boolea原创 2022-02-26 16:31:06 · 435 阅读 · 0 评论 -
【算法练习】日常刷题记录
一、递归与递推递归实现指数型枚举import java.util.*;public class Main { static int n; static LinkedList<Integer> tmp = new LinkedList<>(); public static void main(String[] args) { Scanner scan = new Scanner(System.in); n = scan.原创 2022-02-20 20:52:47 · 341 阅读 · 0 评论 -
【算法练习】无聊的逗(二进制表示组合)
一种朴素的想法是用搜索求木棍的组合,再去比较剩下木棍的组合,剩下木棍的组合中不能有当前木棍组合中的木棍,问题在于:在找剩下木棍的组合时,由于不能包含当前组合中的木棍,不能容易求出来。假设有4根木棍,用二进制0000表示,0代表不取当前木棍,1代表取当前木棍,0001代表取第一根木棍,0011代表取第一二根木棍,以此类推,会产生多少种组合?2^4 = 16(包含了全零)。通过对1移位,即可实现木棍的选取,1 << 0(选第一根),1 << 1(选第二根),16种组合分别为:000.原创 2022-02-19 13:25:39 · 664 阅读 · 1 评论 -
【算法练习】蓝桥杯训练一:区间k大数查询、最大最小公倍数、k好数
蓝桥杯训练一一、区间k大数查询(简单)(模拟)二、最大最小公倍数(中等)(数论)三、k好数(DP)一、区间k大数查询(简单)(模拟)直接模拟就可以,个人觉得题目不严谨,没有说重复元素,也没有说重复元素算并列还是算新的最大数。取出L - R的数,排序,找第k大。import java.util.*;public class Main { public static void main(String[] args) { Scanner sc = new Scanner(S原创 2022-02-18 14:34:34 · 7640 阅读 · 0 评论 -
【算法练习】日常刷题记录
一、有序数组中的单一元素(中等)告诉了有序,还要求复杂度为logn,肯定二分了。注意,每次下标可能为奇数、偶数,是奇数的话就要判断左边的数是否和它相同;是偶数的话就要判断右边的数是否和它相同。class Solution { public int singleNonDuplicate(int[] nums) { int left = 0; int right = nums.length - 1; int mid; while (原创 2022-02-14 16:55:58 · 468 阅读 · 0 评论 -
【算法练习 粘木棍】DFS搜索分组
以题目为例,之前的想法是,有n个木棍,要粘成m个木棍,就找1-m的全排列,并且长度为n的全排列,m=3,n=2时,1 1 2,就是前两个木棍组成一根木棍,最后一根木棍单独。但是全排列会有全为1,全为2的情况,并且1 2 2和2 1 1的情况是重复的,这种方法显然不行。回到n个木棍本身,需要分成m组,那么对每一根木棍,它可能属于第1-m组,所以在遍历每一根木棍时,还要遍历这根木棍的分组,所以在dfs循环里面要写两个循环,外层循环遍历第几个木棍,内层循环遍历这根木棍放第几个组别。// 外层遍历木棍:n个木.原创 2022-02-11 16:50:53 · 845 阅读 · 1 评论 -
【算法练习】计蒜客:查找最接近的元素【lower bound二分查找 + 额外判断】
import java.util.Scanner;public class Main { public static void main(String[] args) { Scanner scan = new Scanner(System.in); int n = scan.nextInt(); int[] arr = new int[n]; for (int i = 0; i < n; i++) { ..原创 2022-01-15 14:42:18 · 291 阅读 · 0 评论 -
【算法练习】LeetCode:34. 在排序数组中查找元素的第一个和最后一个位置【lower bound和upper bound】
class Solution { public int[] searchRange(int[] nums, int target) { int res1 = lowerbound(nums, target); // 第一个大于target的下标,-1就是最后一次出现target的下标(前提是res1找到了) int res2 = upperbound(nums, target) - 1; if(res1 == nums.length .原创 2022-01-15 16:52:32 · 178 阅读 · 0 评论 -
【算法练习】LeetCode:278.第一个错误的版本【二分思想、防溢出】
虽然是一道二分题目,但需要确定while循环是否取等,取特殊情况来确定begin、end的迭代是怎样的,用的是二分模板,但细节需要修改。一定要记得防溢出!!/* The isBadVersion API is defined in the parent class VersionControl. boolean isBadVersion(int version); */public class Solution extends VersionControl { public in.原创 2022-01-15 20:01:49 · 157 阅读 · 0 评论 -
【算法练习】LeetCode-动态规划学习计划
动态规划解题模板: // 初始化 base case dp[0][0][...] = base; // 进行状态转移(遍历所有状态) for 状态1 in 状态1的所有取值: for 状态2 in 状态2的所有取值: for ... dp[状态1][状态2][...] = 求最值(选择1, 选择2, ...)爬楼梯(简单)class Solu原创 2022-01-26 12:02:37 · 520 阅读 · 0 评论