自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 LeetCode刷题日记04(每日一题)

​190. 颠倒二进制位​

2024-07-17 16:14:16 151

原创 LeetCode刷题日记03

这道题可以用动态规划来做,定义dp[][]二维数组表示前i个元素中和能够为j的表达式个数,并且注意target可能为负数,我们可以定义sum统计nums数组中的所有元素的和,并将dp中的和为j整体加上sum进行右移,最后返回dp[nums.length - 1][target + sum]即可。这道题除了可以用简单的循环除法外,还可以使用位运算来进行判断,通过不断右移来缩小n,当n大于1且n的第一位不是0,直接return false即可,另外n==0的特殊情况直接return即可。

2024-07-07 20:56:54 232

原创 LeetCode刷题日记02

LeetCode刷题第二天,其中有斐波那契数列,以及快速幂,面对超大次方的递归分治思想以及模幂运算

2024-06-29 20:20:50 246

原创 LeetCode刷题日记01

从基础开始刷算法

2024-06-28 19:22:05 145

原创 LeetCode刷题:01——05

这次刷题主要是提升Java使用熟练度。

2024-06-06 21:55:27 277

原创 复习题目(2)

NO.11:A子2023。NO.5 :岛屿个数。NO.9:特别数的和。NO.10:冶炼金属。NO.13:网络寻路。NO.14:分巧克力。

2024-04-08 22:10:19 134

原创 复习题目(1)

dfs + 剪枝优化。

2024-04-07 20:56:52 220

原创 [蓝桥杯 2021 国 ABC] 123(前缀和+二分查找)

通过题目描述,我们知道如果单纯用暴力求前缀和肯定过不了大部分样例,我们通过观察可以将数列分为n行,每行都以1开头n结尾,我们可以发现前n行总共的数字数目可以用高斯求和来得出,这样我们可以通过二分查找出所在的行数,我们就直接定位到前1行,对于多出来的部分我们再额外加进去即可。

2024-04-06 17:52:05 188

原创 [蓝桥杯 2019 省 B] 后缀表达式(贪心)

通过题目描述,我们可以用贪心来找出最优策略,如果减号的数量为0个,那么我们对所有数字直接进行相加即可,而对于其他情况,我们可以通过添加括号等方法将所有的负数或者减号都抵消成正数,因此这道题只需要将最大的数减去最小的数,再将其他数字的绝对值一一加上即可,同时注意开longlong防止爆掉。

2024-04-06 16:32:34 202

原创 [蓝桥杯 2017 省 AB] 包子凑数(方案dp)

通过题目描述,我们可以发现,如果包子数目的最大公约数大于1,说明会有无限多个数字无法进行拼凑。因为对于某个无法拼凑的数字,可以乘以最大公约数得到另一个无法拼凑的数字,也就是说如果最大公约数不是1,就会有无穷个无法拼凑的数字,对于有限次的情况,我们可以通过方案dp来存储如果dp[i]可以进行拼凑,说明dp[i + a[i]]同样也可以进行拼凑,根据这个方案,我们就能寻找出答案。

2024-04-06 16:03:22 212

原创 [蓝桥杯 2013 省 A] 大臣的旅费(dfs)

通过题目描述我们可以清楚,如果要找到最大消费,我们就需要找到最长的边,而对于最长的边,我们需要进行dfs,从王国出发,开始寻找最长边,最后寻找到最长边进行高斯求和即可。

2024-04-05 19:09:06 213

原创 [蓝桥杯 2016 省 B] 交换瓶子(暴力枚举)

通过题目描述,我们可以直接模拟题目过程,首先从开头开始遍历,如果遇到错位的瓶子,就从当前瓶子向后再次遍历,直到遇到需要交换的瓶子就直接进行交换,同时统计次数,这样遍历到最后就能直接得出答案。

2024-04-05 18:13:06 222

原创 [蓝桥杯 2022 国 C] 取模(暴力+优化)

我们知道如果对某个数进行取余,例如n % i,取模得到的数一定小于当前数字,也就是n % i

2024-04-05 18:05:22 186

原创 [蓝桥杯 2022 国 B] 齿轮(优化枚举)

根据题目描述,如果采用dfs暴力做法枚举所有方案,肯定会超时,因此我们需要优化枚举,我们都知道在同一组共同转动的齿轮中,线速度相等,因此角速度的比值就是半径的反比,因此我们只需要找到对于每个齿轮作为起始齿轮,只需要找到其倍数半径是否存在即可,而倍数上限就是假设存在半径为1的齿轮,其中最大半径的齿轮就是转速上限,再用bool类型的ans数组记录该倍数是否存在即可,需要注意的是可以用set数组去重,如果存在重复的齿轮,就可以证明ans[1]肯定蹲在,最后只需要进行访问即可。

2024-04-05 13:42:38 587

原创 [蓝桥杯 2022 国 B] 出差(Dijkstra + 优先队列)

首先根据题目描述,我们可以得知我们需要寻找到起点到终点的最短时长(最短路径问题),而要找出最短路径问题,我们可以用迪杰克拉算法,就是从起始点开始遍历,用优先队列优先从最短路径的点开始遍历,如果花费时间存在更小方案就更新dist数组,最后直接输出dist[n] - time[n]即可。

2024-04-05 12:09:27 298

原创 [蓝桥杯 2022 国 B] 卡牌(暴力 + 二分优化)

暴力做法无法通过所有样例,这时候我们就可以考虑二分答案进行优化,我们通过观察可以发现,假设答案是ans,那么小于ans套的都可以进行拼凑,而大于ans套就无法进行拼凑,这样就具有了二段性,因此我们可以枚举卡牌套数来进行二分,以当前套数凑齐所需要的卡牌数量是否大于m来进行判断。根据题目描述,我们可以知道每张牌可填补的数量有限制,因此我们可以用暴力模拟出过程,首先我们需要寻找出每张牌中最小的牌数,再将空白牌填补成该牌即可,最后我们再进行遍历,寻找出最少数量的牌,就是我们要找的答案。

2024-04-04 23:42:13 144

原创 [蓝桥杯 2022 国 A] 环境治理(二分 + 弗洛伊德)

【代码】[蓝桥杯 2022 国 A] 环境治理(二分 + 弗洛伊德)

2024-04-04 23:08:42 534

原创 [蓝桥杯 2022 省 B] 李白打酒加强版(三维动态规划)

通过题目描述,我们可以知道这道题目涉及到某种状态时候的方案数,因此我们可以用动态规划来解决问题,并且我们需要注意到酒的状态,因此我们可以用三维数组来存储状态,我们知道N,M最大不会超过100,并且如果酒超过了100斗,即使遇到100朵花也无法喝完,因此只需要定义大小都为100的三维数组即可,并且枚举三种状态,分别是店家,遇到的花以及酒的斗数都进行枚举,根据状态转移方程求得每个状态的方案数量,并且初始化动态数组dp[0][0][2] = 1;

2024-04-04 13:17:32 937

原创 [蓝桥杯 2021 省 B] 杨辉三角形(二分查找+枚举)

我们之前学过有关杨辉三角的一些性质,我们知道杨辉三角某个数等于左上和右上两个数相加,但是如果我们按照这个性质依次枚举每行每列,就会很容易超时,因此我们可以枚举列,再二分查找行来寻找满足要求的答案,我们可以先将列数到30,基本涵盖了所有的答案,通过组合数性质来二分查找答案即可。

2024-04-04 12:50:51 1130

原创 [蓝桥杯 2021 省 A] 左孩子右兄弟(树形dp)

根据题目描述,我们可以知道,当某个结点要获取最长长度时候,其某个能获取最长长度的子节点和其兄弟数量的和就是当前的最长长度,因此我们可以用树形dp来依次获取最长的长度,因为我们只需要知道某个节点的子节点数量即可,所以我们可以直接用vector的二维数组来表示两个节点的关系,同时也能获取子节点的数量,再使用dfs依次向下探索,寻找能够获取最长长度的子节点即可。

2024-04-03 22:26:27 135

原创 [蓝桥杯 2020 国 B] 游园安排(二分优化+贪心+dp)

通过题目描述我们可知这是一个最长上升序列的类似题目,而我们需要注意路径问题,即在求出最长子序列长度的同时还要记录当前的最长子序列,因此我们依然可以用二分优化来做题,我们需要用ans来存储答案路径,同时用res来充当二分查找的方案利用dp不断更新路径,最后直接输出ans[len]即可。

2024-04-03 22:04:54 191

原创 最长上升子序列(二分优化)

之前我们用过dp来求最长上升序列的长度,而对于此算法的复杂度为O(n^2),而我们可以用二分来进行进一步的优化,使用贪心策略,遍历每个数组的值,使用ans数组来存储当前的最长上升序列,并利用二分查找来寻找当前ans数组中第一个大于该数字的位置并进行替换,同时统计当前的下标和len之中的最大值,最后输出len长度即可。

2024-04-03 21:46:25 111

原创 最长上升子序列(dp)

根据题目我们得知如果想要找到答案,如果用暴力做法时间复杂度会很大,因此我们需要用动态规划来做,我们用dp数组来记录最长的上升子序列,而对于dp[i] 前i个dp中,如果该数可以接在某个最长子序列的后面,就取其二的最大值,最后在进行一遍遍历,找出最大值即可。

2024-03-30 18:43:00 142

原创 [蓝桥杯 2020 省 AB2] 回文日期(枚举)

根据题目描述,我们可以得知如果寻找规律来做题很难做出来,而直接枚举8位数基本不可能过样例,而通过观察我们可以发现回文日期可以分为前后两段,后面一段就是前面翻转过来的,因此我们可以枚举一半日期,这样就能通过样例,因此我们只需要检查该回文日期的月数和日数是否符合规定,并且判断特殊回文日期是否满足特殊要求即可。

2024-03-30 17:54:55 184

原创 [蓝桥杯 2019 国 AC] 轨道炮(枚举,哈希表)

通过题目描述我们可以知道,如果通过观察寻找规律几乎很难做出,因此我们可以用枚举来列举所有时间(限制1000即可)内每个单位的状态,并用哈希表来存储某个坐标的数量,并记录最大值,最后直接输出答案即可。

2024-03-30 13:18:30 249

原创 [蓝桥杯 2018 国 C] 交换次数(枚举,贪心)

通过题目描述,如果直接使用贪心来做的话,很难找出正确的贪心方法,因此我们可以先枚举所有的排列情况,而对于如何排列成目标状态,我们可以用贪心来做,然后只需要找到正确的答案即可。

2024-03-25 21:56:25 184

原创 [蓝桥杯 2015 国 B] 密文搜索(哈希表,枚举)

从题目中我们可以得知,我们需要枚举所有的子串情况,而对于如何匹配,我们可以给源串和目标串一个固定的顺序,只要源串和目标串中每类字符数量对应相等,那么固定顺序就会相同,因此我们只需要枚举所有的子串情况并用map来记录该情况的数量,并且匹配每个目标字符串的固定顺序即可。

2024-03-25 20:59:54 156

原创 [蓝桥杯 2015 省 B] 生命之树(树的建立+dfs)

由题目给出的范围我们知道,如果n取最大值1e5而且每个分数为1e6,那么最大值僵尸1e11,超过了int类型的范围,因此我们要开longlong类型,防止爆掉,并且我们需要找到以某个节点开始,访问所有子节点,返回的最大值的和最大,并且我们知道,某个点的子节点之间没有连接,因此我们只需要从1开始遍历,逐步返回每个结点的最大值即可。

2024-03-25 20:42:27 141

原创 [蓝桥杯 2019 省 A] 修改数组(哈希表)

通过题目描述我们可以用哈希表(map)来查找某个数字是否出现过,如果出现过就加1,反之直接跳过,因此我们只需要一个变量即可,用一个for循环遍历,从第二个数开始用count来查找是否有值对应,最后直接输出即可,为了优化,我们可以用unordered_map来替换map来提高效率,但是该做法仍有部分案例无法及时通过。

2024-03-23 15:38:49 132

原创 [蓝桥杯 2023 国 B] 班级活动

【代码】[蓝桥杯 2023 国 B] 班级活动。

2024-03-23 13:02:19 165

原创 [蓝桥杯 2018 省 AB] 全球变暖(bfs)

通过题目描述我们可以知道,如果要进行图的遍历并且打上相应的标记,我们就可以用到bfs,当到陆地的时候就进行标记,同时我们也需要注意当前陆地能否被淹没,如果当前陆地其中一款区域四周都是陆地的话就不会被淹没,此时我们就可以记录当前不会被淹没的陆地,同时统计所有的联通陆地,拿所有的联通陆地减去不会被淹没的联通陆地就是我们需要的答案。

2024-03-23 12:38:36 173

原创 [蓝桥杯 2016 国 C] 赢球票(队列)

根据题目描述,我们可以得知如果当前数到的数字等于当前的球票编号就直接将当前球票赢取并且在下一个球票再次从1开始数,而我们开始选择的地方也是任意的,因此我们需要枚举所有的情况来找出赢取球票最多的情况,而对于每种情况,我们可以用队列来存储相应的值,每次遍历取出当前对头,如果对头等于当前的数字就直接赢取,如果不是就将对头放在队尾,让队列来实行动态遍历,如果数的数字大于了最大编号就直接break即可。

2024-03-23 11:41:30 125

原创 [蓝桥杯 2020 省 AB3] 乘法表(短除法)

通过题目的描述我们需要将输出的每一个数都转化为n进制,因此我们可以用短除法来进行转化,而转化可以直接用string类型打印,而大于10的数字需要用大写字母来表示。

2024-03-23 11:07:26 191

原创 [蓝桥杯 2022 省 B] 修剪灌木(找规律)

根据题目描述,我们可以寻找规律,将树从左到右编号,我们可以发现,如果想要长得最高有两种情况,一种是从第一次被剪向右开始,直到下一次被剪,另一种是向左开始,我们只需要在两者之间取最大值即可。

2024-03-23 10:25:04 150

原创 [蓝桥杯 2021 省 B] 时间显示

由题目可知,最大值不超过1e18,而longlong最大值为9e18,因此开到longlong足以,我们直接获取小时,分钟,秒数,对于小时数我们直接降到24之内即可。

2024-03-21 22:52:26 325

原创 [蓝桥杯 2019 国 B] 解谜游戏(找规律)

由题目描述,我们可以知道如果模拟这个过程来获取正确答案几乎不可能,我们通过观察可以发现,对于最内圈,旋转的周期是4,中圈是8,外圈是12,也就是说,通过旋转,内圈的某一个字符对应中圈的两个字符以及外圈的三个字符,而对于处在同一水平线上的三个字符可以通过任意轮换到达正确位置,因此我们只需要关心三个字符所占的比例即可,也就是‘G’:‘R’:‘Y’ = 3:2:1。因此我们可以遍历内圈的字符,再统计内中外圈对应字符的数量,如果成比例就通过,如果其中一个比例有误就直接输出NO即可。

2024-03-21 22:40:25 216 1

原创 [蓝桥杯 2015 省 A] 饮料换购(枚举)

根据题目描述,我们可以得知,每一轮饮料可以换1/3原来的饮料,而剩下的低于3个瓶盖会计入新的饮料瓶盖数目中,如此循环往复,直到瓶盖数目少于3就停止,根据这个过程,我们可以直接模拟出来答案。

2024-03-21 22:00:58 294

原创 [蓝桥杯 2020 省 AB1] 走方格(动态规划)

根据题目提示,我们可以得知这是一道比较简单的动态规划题目,我们可以初始化dp数组,并让dp[1][1] = 1, 并且用两个for循环遍历,因为只能往右或者下走,因此for循环完全可以,如果当前行数和列数为偶数直接让当前dp为0,如果不是,dp[i][j] += dp[i-1][j];dp[i][j] += dp[i][j-1],最后直接输出dp[n][m]即可。

2024-03-21 20:16:09 193

原创 [蓝桥杯 2021 省 AB2] 完全平方数(暴力+优化)

15 = 3 * 5, 15 * 15 = 3 * 3 * 5 * 5,当两数相乘分别拆分最小的质因数,并且每个数的数目都是偶次方的时候就是完全平方数,因此我们可以将输入的数进行拆分,并且将奇数次数目的数字进行相乘,将其补充成偶次数目,最后得出的乘数就是答案。根据题目我们可以得出用暴力枚举所有的方案会导致一部分样例超时,而暴力方法就是枚举1到n的所有数字,然后每次都进行检查,如果该数是平方数,就直接返回即可。我们通过观察样例可以发现:12 = 3 * 4 = 3 * 2 * 2;

2024-03-21 19:55:03 366

原创 [蓝桥杯 2020 国 C] 重复字符串(找规律,枚举)

由题目我们可知,如果字符串的长度不是k的倍数,那么字符串就无法修改,因此直接输出-1即可,并且我们为了达到最少的修改次数,我们将字符串分成k段,每一段对应的字符数量最多的字符不进行修改,从而可以达到最少的修改次数,而对于统计字符的数量,我们可以用哈希表(map)来进行存储,并提取出最大的数量即可。

2024-03-21 19:20:02 267

空空如也

空空如也

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

TA关注的人

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