- 博客(69)
- 收藏
- 关注
原创 蓝桥杯2023年第十四届省赛真题-蜗牛
1.先接收柱子的个数,之后在接受柱子的位置。把柱子的位置放入数组。之后再把传送门的起点和传送门的终点分别放入专门放传送门起点的数组中和专门放传送门终点的数组。定义一个dp数组来表示在第几根杆子时在柱子的底部和转送门花费的最小时间,初始化到第一根柱子的底部和传送门的最小花费时间。用for循环从第2根柱子来进行遍历,在遍历到最后一个柱子时,柱子上是没有传送门起点的,只有传送门终点。之后跟局递推公式来进行遍历dp【i】【0】和dp【i】【1】花费的最小时间。输出时要进行四舍五入保留两位小数。
2024-03-12 20:06:32
473
原创 蓝桥杯2023年第十四届省赛真题-矩形总面积
1.先分类成矩阵是否重叠,没有重叠时矩阵的面积直接用左右两个坐标计算出来,当矩阵有重叠时就要进行查找重叠的矩阵坐标的左下标和右下标,根据Math.max和math.min来模拟出重叠的矩阵坐标。同时在计算时要注意计算的值会比较大,所以用long的类型不会数值溢出。
2024-03-11 19:43:51
455
原创 蓝桥杯2022年第十三届省赛真题-求阶乘
1.定义left为0,right为Long.MAX_VALUE。之后再进行while循环来进行查找精准。之后在调用方法来计算二分查找的值中有几个5的倍数的个数。如果这个值中5的倍数的个数不等于条件就返回-1。符合条件就返回这个二分查找的数。
2024-03-10 23:30:26
411
原创 蓝桥杯2023年第十四届省赛真题-数组分割
之后统计数组中有多少个奇数和偶数。如果奇数有奇数个的话,就没有组合能都是偶数。如果奇数有偶数个的话,就要进行组合。例如:一个S中偶数个奇数组合,另一个S中没有奇数,或者一个S中偶数个奇数组合,另一个S中也有偶数个奇数组合。或者一个S为空,另一个为全部值。组合为2的偶数次方加奇数次方-1。
2024-03-10 23:04:54
416
原创 力扣:34. 在排序数组中查找元素的第一个和最后一个位置
1.先用二分法来找到目标值的开始的下标,之后再把目标值加1,之后再进行查找目标值加1的下标这样就能找到目标值的结束的下标。
2024-03-06 22:23:56
379
原创 力扣:264. 丑数 II
1. 先把最小的丑数1加入到对列中在出队列中的最小元素,同时要把出队的最小元素的2的倍数和3的倍数和5的倍数进队列。但在进队列时要判断是否有元素重复进队列,所以要用HashSet来进行判断是否有元素重复。
2024-03-05 20:02:45
415
原创 力扣:71. 简化路径
1.思路:在栈中只要把 / 的下标进栈和出栈就可以计算字符串中的字母,获取字符串中的字母用substring()函数根据 两个 / 的下标来确定区间。之后把符合的字母加入集合中。之后要判断值为“. ."时要删除集合中最后一个元素。之后用for循环拼接简化路径。
2024-03-04 23:38:31
466
原创 力扣:32. 最长有效括号
1.用栈来模拟进栈的操作,先要在栈中进栈-1下标来防止第一个字符为 ),当字符为(时进栈(的下标,当字符为)时先出栈一个元素,在判断栈是否为空,栈为空时,进栈)的下标,不为空时就用i-peek()来计算最长有效括号。
2024-03-03 22:34:15
347
原创 力扣:120. 三角形最小路径和
1.先定义dp数组在下标i和下标j时的最小路径和 ,之后初始化dp数组值dp【0】【0】=triangle.get(0).get(0)。再用for循环来遍历数组dp【】的i,并赋值每行的下标为0的dp数组。之后再用for循环遍历dp【i】【】的j,递推公式来计算dp【i】【j】=Math.min(dp[i-1][j],dp[i-1][j-1])+triangle.get(i).get(j)。赋值每行的下标为triangle.get(i).size()-1的dp数组。
2024-02-29 20:20:58
464
原创 面试题 08.06. 汉诺塔问题
1.首先将 n-1 个盘子,从第一个柱子移动到第二个柱子,然后将最后一个盘子移动到第三个柱子上。最后将第二个柱子上的 n-1 个盘子,移动到第三个柱子上。
2024-02-28 23:20:04
334
原创 力扣:112. 路径总和
1.先声明一个接收节点的和值的变量,在定义一个dfs的函数在这之中要判断是否空节点和更新节点的和值,终止条件,递归遍历整个树来进行和值的路径总和。深度优先搜索和递归遍历。
2024-02-27 22:48:52
492
原创 力扣:134. 加油站
1.分为三种情况,一种为总存储的油小于总消耗的油,这样不能跑一圈。二种为从0结点开始就没有断过油。三种为中间有断油过,从后面向前遍历后填过剩下油的最小值,这个点就是出发点。
2024-02-25 23:28:53
515
原创 力扣:93. 复原 IP 地址
1.先定义一个接收的集合,之后再定义一个记录小数点的变量。之后编写回溯函数,终止条件为小数点的个数为3时,同时要判断最后一段的组合的值是否属于ip地址的范围。之后再用for循环来遍历ip地址的组合,先判断组合的ip地址是否符合,符合就用substring()将小数点加入到字符串中 同时小数点的个数加一,之后用嵌套的方式来寻找下一个ip地址,结束后在回溯操作。再写一个检查ip地址值是否符合的函数。
2024-02-24 22:49:24
889
原创 力扣:718. 最长重复子数组
1.先声明一个接收最长公共的子数组的长度变量, 在定义一个dp数组表示在下标i和下标j中的公共最长的子数组的长度,在把nums1表示成背包,nums2表示成物品遍历。递推公式为如果背包和物品中的值相同最长子数组的长度加1,dp[i][j]=dp[i-1][j-1]+1。更新最长子数组的长度。
2024-02-22 22:58:35
366
原创 力扣:869. 重新排序得到 2 的幂
1.先把int值转换成char数组,之后再用回溯来枚举出全部的排列顺序,在回溯排列过程中要防止同一个数据的重新使用,同时要计算排列中的数字总和,在进行判断这个数据是否是2的幂,使用递归的方式进行,判断后将判断结果加入到li2集合中最后遍历集合li2来判断全部排列的数组是否有谁的总和是符合2的幂,有返回true。
2024-02-21 23:06:53
452
原创 力扣:40. 组合总和 II
1.先声明好大集合和小集合,在调用回溯函数,终止条件为sum==target,要进行剪枝操作减少遍历的次数,去重操作防止数组中有两个相同的值来组成的集合相同。
2024-02-20 23:02:45
486
原创 力扣:45. 跳跃游戏 II
1.声明一个dp数组来表示到下标i时要跳转的最小次数,同时要个每个dp数组的值赋值为最大。之后初始化dp【0】=0,用for循环来进行遍历下标i和遍历下标i之前的值,判断条件为如果i之前的某个下标跳转的距离>=i时要根新dp【i】的值 ,递推公式为dp【i】=math,min(dp[i],dp[j]+1)。表示在这个跳转范围里dp【i】的值为dp【j】加一。
2024-02-19 23:51:53
495
原创 力扣:139. 单词拆分
1.先声明dp数组的含义为下标i表示的是在s变量中i前面的字符串是否在wordDict变量中存在,初始化dp【0】来进行后面dp数组的递推。同时要判断截取的值是否在wirdDict中是否存在,还要判断dp【j】的下标的j前面的字符串是否也在wirdDict中,如果都符合条件就给dp【i】赋值true。
2024-02-18 22:58:29
479
原创 力扣:300. 最长递增子序列
1. 先定义dp数组来表示在下标为i时最长递增子序列,先初始化一下每个下标的值为dp【i】=1。同时我们要判断在下标i之前的最长的递增子序列为多少,在判断当前的下标i是否满足递增的条件满足的话就进行dp【i】的重新赋值。之后要更新接受的最长递增序列的长度。
2024-02-17 21:41:27
501
原创 力扣:123. 买卖股票的最佳时机 III
2.初始化dp数组的dp【0】【1】=-prices【0】和dp【0】【3】=-prices【0】。再用for循环来进行遍历全部的dp数组,递推公式: dp[i][1]=Math.max(dp[i-1][1],dp[i-1][0]-prices[i]);1.先声明一个二维dp数组来记录每一个下标的的状态,例如:没有买一次操作,买了第一次操作,卖了第一次没买第二次操作,买第二次操作,卖了第二次操作。
2024-02-16 22:57:43
553
原创 力扣:122. 买卖股票的最佳时机 II
2.在这题中我们要判断两种情况分别是在下标i时手中有股票的最大利润,递推公式:dp[i][1]=Math.max(dp[i-1][0]-prices[i],dp[i-1][1]);另一个为下标i时手中没有股票的最大利润,递推公式:dp[i][0]=Math.max(dp[i-1][0],dp[i-1][1]+prices[i])。1.先声明一个dp数组来表示在下标为i时手中有无股票的最大利润,dp【i】【0】表示为在下标为i时,手中没有股票。dp【i】【1】表示为在下标为i时,手中有股票。
2024-02-15 14:00:21
512
原创 力扣:53. 最大子数组和
如果当前i-1的sum值小于o,为负数时就抛弃前i-1的sum值,把nums【i】的值复制给sum。如果当前i-1的sum值大于0,我们就要更新sum值来判断是前i-1的sum值大还是前i的sum值大。1.先把数组为空和数组的长度为1时的特殊情况分别开来,之后声明一个dp数组表示下标为i时的连续最大和,初始化dp数组的值为nums[0],递推公式为dp[i]=Math.max(dp[i-1]+nums[i],nums[i]),判断是前i的dp数组值大还是当前nums[i]的值大,赋值给dp数组dp[i]。
2024-02-13 21:21:11
526
原创 力扣:376. 摆动序列
左坡值<=0且右坡值>0,符合摆动序列的条件sum加一,同时把右坡值的差值赋值个左坡值,这样就不断在更新左坡值的差值来,同时假如下一节点和前一节点相等了,左坡值的值不是为0,而是为上一差值不为0的差值。1.先规定好左坡值和右坡值,在计算当前节点比上一节点 的差值。如果左坡值>=0且右坡值<0或者。
2024-02-12 23:25:04
489
原创 力扣:455. 分发饼干
1.先把两个数组按顺序遍历好,之后用最大的饼干来喂最大的胃口,如果最大的饼干不能喂饱最大的胃口,就除去这个最大的胃口,在剩下的为胃口中找最大的胃口来进行比对。这题主要历用了通过局部的优解,来进行全局的推导,推导出全部的答案。
2024-02-11 21:54:13
647
原创 力扣:51. N 皇后
2.用for循环来遍历全部的操作,用jiancha()函数检查char【row】【i】节点的同一行和同一列和同一斜线上是否用其他皇后。如果没有,在char【row】【i】放置皇后,再进行递归操作,来代替for嵌套继续遍历下去,结束操作后回溯节点。再调用回溯函数 ,终止条件为遍历的行数等于n时结束遍历,把char【】【】类型的值加入到集合li1中,再加加入过程中要将char【】【】类型转化成LIst<String>类型再把li2集合加入到li1集合中去。
2024-02-09 22:19:37
892
1
原创 力扣:47. 全排列 II
2.调用回溯函数,终止条件为li2集合的长度等于nums.length,相当于遍历到了结尾,同时要注意相同的数字造成的重复的全排列,所以要去重。在遍历过程中假如Index【i】值为0就表示没有使用该nums【i】的值,使用的nums【i】值的Index【i】值为1。之后进行递归和回溯操作来遍历全部的全排列。1.先写一个集合来接收全部的全排列,再写一个集合来接受单个的全排列。在声明一个int【】数组来用于去重用的标记nums数组中什么元素用了的标记。同时排列一下nums数组方便去除重复的全排列。
2024-02-07 19:15:37
528
原创 力扣:78. 子集
1.跟前面的组合题目有相同的点,主要区别在于:组合题目是遍历到符合条件的组合时加入li1集合中,子集题目是每递归一次就要把结果加入到li1集合中,并遍历但nums数组的最后。其他点和组合问题一样。
2024-02-06 22:05:29
577
原创 力扣:131. 分割回文串
2.写一个回溯函数,里面有终止条件和遍历全部组合的for循环来进行遍历全部的组合,终止条件为开始索引等于字符串的长度时,表示遍历完了整个字符串,li2加入到li1中去。在遍历for循环中要回溯操作,同时要检查分割段是否为回文子串,如果不是回文子串就跳过本次循环。要写一个检查回文子串的函数,其中用双指针来检查这个分割段是否是回文子串。1.先声明一个集合来接受全部的回文子串组合,在声明一个集合来接收单个回文子串的组合。
2024-02-05 23:20:52
548
原创 力扣:17. 电话号码的字母组合
1.先把0到9的对应的字符串用一个string类型的数组来储存起来,之后写回溯函数,组合的终止条件为s.length()==digits.length(),同时也要防止i下标超出string类型digits中的索引范围 ,之后就是找到对影数字的字符串的下标,用for循环来进行遍历组合,达到组合长度后,进行回溯操作。
2024-02-04 23:20:56
862
原创 力扣:216. 组合总和 III
2.写一个回溯函数,里面有终止条件和遍历全部组合的for循环来进行遍历全部的组合,终止条件为li2的集合的长度等于k时,同时li2的集合中元素的总和要等于n时,li2才能加入到li1中去。在遍历for循环中要回溯组合。1.先声明一个集合来接受全部组合等于n的组合,在声明一个单个组合的集合来接收遍历的全部的组合。
2024-02-04 16:45:28
465
原创 力扣:77. 组合
回溯终止条件,把单个集合中的组合加入到大集合去,同时选择下一个值进行递归组合,递归到达到组合的个数时,回溯,删除处理的点进行下一个点的组合。1.先定义一个接收全部组合的集合,在定义一个单个组合的集合,再写一个回溯方法来进行回溯,
2024-02-03 22:18:01
633
原创 力扣:1534.统计好三元组
1.先枚举好i,j,k的取值范围,之后用for循环来一一枚举i,j,k的值,同时在枚举过程中查询符合三元组的条件。在这题中课外知识点为Math.abs()用于数取绝对值。//判断三元组的条件。//i,j,k的取值范围和规定。
2024-02-02 22:29:47
301
原创 力扣:829. 连续整数求和
1.主要在于变量n枚举分成几个,是偶数个还是奇数个。分成奇数个时要满足n%i的余数为0,结果的商为分成后的中位数,分成偶数个时要满足n%i的余数为i/2,结果的商为中位数中的前面一位。这样可以平衡值,从而达到分成的值为连续的整数。
2024-02-01 23:14:24
364
原创 力扣:1291. 顺次数
1.用枚举来一一枚举了顺次数的每个位数上的值,之后来把符合枚举的顺次数加入到集合中去。用Collections.sort()来进行快速排序。
2024-01-31 23:12:18
350
原创 力扣:970. 强整数
1.枚举出了次方i和j的全部值的情况下的sum值,同时i和j的范围是0到20。课外的补充有Math.pow()来计算次方的方法,contains()是ArrayList中包含特定值的方法。
2024-01-31 22:45:00
317
原创 力扣:1566. 重复至少 K 次且长度为 M 的模式
1.因为连续的相等的值是有周期性的,所以用for循环来遍历i和i+m的值是否相等,相等的话就让tmp值加1操作等tmp的值加到一定程度时就满足了重复k次的条件。之后我们用枚举来遍历数组上每个节点的连续模式。
2024-01-30 21:15:42
367
原创 力扣:949. 给定数字能组成的最大时间
1.先用for循环来把小时和分钟的下标的全部组合都遍历出来,之后选取最大的值来为最大时间。2.把选取最大的值用string.format来格式化字符串为小时和分钟的形式。
2024-01-30 19:54:03
356
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人