03 2024 档案

摘要:388. 游戏 (区间DP|博弈论) 思路:在最坏情况下考虑问题,每个人都选择对自己有利的情况,dp[i][j]指的是对方获得的分差,分值总和固定为sum,因此我方方差越大,对方的分值就越小。最后A+B=sum,A-B=diff。 import java.util.*; public class M 阅读全文
posted @ 2024-03-30 11:52 he0707 阅读(8) 评论(0) 推荐(0) 编辑
摘要:1371. 货币系统 (完全背包DP) 思路:如何优化空间 所以dp[i][j] = dp[i-1][j] + dp[i][j - v] import java.util.*; public class Main { private static int V, N; private static i 阅读全文
posted @ 2024-03-29 10:50 he0707 阅读(3) 评论(0) 推荐(0) 编辑
摘要:312. 乌龟棋 (线性DP) 思路:本题的核心在于到达终点时刚好用光M张爬行卡片,因此这道题不是对我们的棋盘索引的dp,而是对卡片数量的dp。假设我们总共有a张1步卡,b张2步卡,c张3步卡,d张4步卡,最终状态一定是dp[a][b][c][d],因为我们最后会把卡片全用完,针对上一步每次有四种情 阅读全文
posted @ 2024-03-28 10:18 he0707 阅读(6) 评论(0) 推荐(0) 编辑
摘要:731. 毕业旅行问题 (状态压缩DP) 思路:使用状态压缩DP,dp[i][j]中i表示状态(二进制表示),j表示最后所在城市。算法时间复杂度是O(2n*n2),需要优化掉没有访问过1号城市的状态和无效状态。 import java.util.*; public class Main { priv 阅读全文
posted @ 2024-03-27 11:12 he0707 阅读(7) 评论(0) 推荐(0) 编辑
摘要:1265. 数星星 (树状数组) 思路:本题要统计每个星星左下角星星的数目,由于星星按y坐标增序给出,y坐标相同的按x坐标增序给出,所以不用关注y,可以视作每个x位置有几颗星星就为几的数组,每次统计左侧前缀和,再将当前计算的星星x位置数加一,使用树状数组(推荐视频:五分钟丝滑动画讲解 | 树状数组) 阅读全文
posted @ 2024-03-26 18:55 he0707 阅读(8) 评论(0) 推荐(0) 编辑
摘要:1413. 矩形牛棚 (单调栈) 思路:本题是在一个含多个被破坏点的矩阵中找最大矩形,可通过将原数组处理成高度数组(当前所在列向上连续有多少0),将问题转化成R行个类似接雨水问题,也就是求最大面积矩形,这可以使用从小到大的单调栈求左右第一个比当前小的位置获得。 import java.util.*; 阅读全文
posted @ 2024-03-26 15:54 he0707 阅读(11) 评论(0) 推荐(0) 编辑
摘要:1402. 星空之夜 (哈希表) 思路:整体方法就是使用DFS找出所有星群,难点是判断星群是否相似,这里是通过累加星群内每两点之间的距离作为哈希值判断是否相似。 import java.util.*; public class Main { private static final double e 阅读全文
posted @ 2024-03-26 15:36 he0707 阅读(7) 评论(0) 推荐(0) 编辑
摘要:528. 奶酪 (并查集) 思路:大体就是并查集的模板,空洞数组从1到n,增加0作为下表面,n+1作为上表面,遍历所有空洞,若与上下表面相切或是相交就将i join 到0或n+1,然后再比较任意两个空洞,两者相切或是相交就join起来,最后判断0与n+1是否相连。 import java.util. 阅读全文
posted @ 2024-03-26 15:25 he0707 阅读(8) 评论(0) 推荐(0) 编辑
摘要:687. 扫雷 (Flood Fill) 思路:首先处理读取的网格str数组为g数组,若为地雷,则对应位置为-1,否则对应位置为以当前位置作为中心九宫格内地雷数量。然后遍历新数组g,若为0,则点击次数加一,再使用DFS处理当前位置即周围九宫格,若也为0继续DFS,所有搜索过的位置都标记为-1,最后再 阅读全文
posted @ 2024-03-26 15:09 he0707 阅读(8) 评论(0) 推荐(0) 编辑
摘要:1355. 母亲的牛奶 (BFS) 思路:使用BFS搜索所有可能出现的情况,同时保存到used数组,防止重复搜索,最后遍历used数组,因为只求C桶中牛奶,所有先遍历C桶,出现A桶为空立即打印结果并break。 import java.util.*; public class Main { priv 阅读全文
posted @ 2024-03-26 14:53 he0707 阅读(9) 评论(0) 推荐(0) 编辑
摘要:167. 木棒 (回溯) 思路:把最长木棒长度作为初始,逐渐增减,使用dfs寻找最小的可能初始长度。 需要注意的点就是剪枝: 剪枝 1:sum % length == 0 只有 length 是 sum 的约数才有可能凑出多个等长的木棒 剪枝 2:优化搜索顺序,木棍长度从大到小排序,可以减少搜索的分 阅读全文
posted @ 2024-03-26 11:54 he0707 阅读(8) 评论(0) 推荐(0) 编辑
摘要:十一 2060. 奶牛选美 (DFS) 思路:使用dfs找出两个相邻的斑点,搜索过的点改为'.'防止重复统计,然后依次遍历两个斑点内的点,找出最小曼哈顿距离。 import java.util.*; public class Main { static int n, m; static char[] 阅读全文
posted @ 2024-03-26 11:17 he0707 阅读(9) 评论(0) 推荐(0) 编辑
摘要:1360. 有序分数 (最大公约数|递归) 方法一 思路:统计所有组合,并求其最大公约数是否为1,只有最大公约数为1的组合才成立,然后按组成的分数大小顺序排序。 import java.util.*; public class Main { private static int gcd(int a, 阅读全文
posted @ 2024-03-25 21:17 he0707 阅读(5) 评论(0) 推荐(0) 编辑
摘要:1343. 挤牛奶 (区间合并) 思路:将挤奶时间段按开始时间重新排序,然后合并区间右侧和下一区间左侧重合的区间,当不重合时,计算最长连续挤奶时间以及最长连续无人挤奶时间。 import java.util.*; import java.util.stream.IntStream; public c 阅读全文
posted @ 2024-03-25 21:07 he0707 阅读(7) 评论(0) 推荐(0) 编辑
摘要:3498. 日期差值 (日期问题) 略 import java.util.*; public class Main { static int[] months = {0,31,28,31,30,31,30,31,31,30,31,30,31}; private static int is_leap( 阅读全文
posted @ 2024-03-25 20:59 he0707 阅读(3) 评论(0) 推荐(0) 编辑
摘要:4261. 孤独的照片 (贡献法) 思路:从左向右统计与当前奶牛左侧连续不同品种的数量left,从右向左统计与当前奶牛右侧连续不同品种的数量right,最终结果就是每头奶牛right+left+left+right。 import java.util.*; public class Main { p 阅读全文
posted @ 2024-03-25 20:55 he0707 阅读(10) 评论(0) 推荐(0) 编辑
摘要:1262. 鱼塘钓鱼 (多路归并) 思路:遍历最远到的鱼塘,同时将截止时间减去路上花的时间,然后多路归并,不考虑具体钓鱼的顺序,每次都钓最多的鱼。 import java.util.*; public class Main { private static int[] a; private stat 阅读全文
posted @ 2024-03-25 20:43 he0707 阅读(8) 评论(0) 推荐(0) 编辑
摘要:505. 火柴排队 (归并排序|离散化) 思路:先将两组数组按(2 3 1 4 -> 2 0 1 3; 3 2 1 4 -> 2 1 0 3)规则排序,然后使用c数组建立双方的映射,从c[ai[i]]=bi[i],接着就是使用归并排序求c数组的逆序对即交换次数。 import java.util.* 阅读全文
posted @ 2024-03-25 20:07 he0707 阅读(5) 评论(0) 推荐(0) 编辑
摘要:3745. 牛的学术圈 I (双指针|二分) 思路:要到达最大h指数,此时有a1篇引用大于等于h,a2篇引用等于h-1,且满足a1+min(a2, L)大于等于h,a1、a2可使用双指针分别获取,h则可使用二分法遍历减少耗时。 import java.util.*; public class Mai 阅读全文
posted @ 2024-03-25 19:32 he0707 阅读(5) 评论(0) 推荐(0) 编辑
摘要:4262. 空调 (差分) 思路:让p减去t的到每个牛栏需要降低的温度,改变一组连续牛栏温度的操作自然想到使用差分法,得到diff数组,因为差分法同时改变连续牛栏温度是通过左右两边进行相异增减,所以要最小命令次数只需要统计diff数组的正值和或负值和。 import java.util.*; pub 阅读全文
posted @ 2024-03-25 17:21 he0707 阅读(5) 评论(0) 推荐(0) 编辑
摘要:562. 壁画 (前缀和) 思路:壁画最终应是长度为mid=(N+1)/2的连续一段,而被摧毁的墙则在两边,故以终点为标志从mid遍历到N,确定最大的一段美观总分,同时因为多次计算一段美观评分耗时多,可提前计算出美观评分的前缀和,然后对应的美观总分=sum[i]-sum[i - mid]。 impo 阅读全文
posted @ 2024-03-25 16:39 he0707 阅读(7) 评论(0) 推荐(0) 编辑
摘要:503. 借教室 (差分|二分) 思路:使用二分法遍历目前为止订单是否满足,分为[left, mid-1]和[mid, right]两部分,同时订单是在连续区间内加上相同值,所以利用差分法,在新的diff数组的左右边界操作,然后累加判断n天内教室是否满足订单。 import java.util.*; 阅读全文
posted @ 2024-03-25 15:26 he0707 阅读(10) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示