随笔分类 -  美团笔试

摘要:题面 核心思想 dp[i][j] 表示前i个数字和为j时的组合数 那么第i个数的取法有 1 <= k <= j 需要遍历 第 i 个数取 k 前 i - 1 个数取 j - k 时 dp[i][j] = (dp[i][j] + dp[i - 1][j - k]) % MOD; 注意是和为j 第i个数 阅读全文
posted @ 2024-04-10 18:57 Shie1d 阅读(146) 评论(0) 推荐(0)
摘要:题面 核心思想 区间DP dp[i][j][2] 表示区间 i~j (i,j都包含)区间 在下标j 变成0 和 1 的 两种情况下满足条件的操作次数 代码 import java.util.*; public class Main { public static void main(String[] 阅读全文
posted @ 2024-04-10 15:35 Shie1d 阅读(107) 评论(0) 推荐(0)
摘要:题面 核心思想 可以从示例中看出 当 sum / n 能够整除时 我们选择平均数作为众数即可 不能整除时 也就表示着不可能让所有数相同 那么我们可以舍弃掉一个数a 记剩下的数集合为 b 那么当 b 需要 +1 或 -1 后可能会剩下一些数 那么我们可以选择让 a去执行相反操作从而不影响 b 中剩下的 阅读全文
posted @ 2024-04-10 11:27 Shie1d 阅读(355) 评论(0) 推荐(0)
摘要:题面 核心思想 这题主要在于复杂度的考虑 枚举每一行能放多少个并不是o(n)的 就算是10000也就20几个能整除的 所以第一层循环复杂度很小 内循环一遍dfs o(n)搜索就ok 这里也没有新建矩阵 是在原字符串上操作的~ 代码 import java.util.*; public class M 阅读全文
posted @ 2024-04-07 14:20 Shie1d 阅读(150) 评论(0) 推荐(0)
摘要:题面 核心思想 前缀和(不过是以一整行或一整列的维度)(滑动窗口应该也可以) 需要注意的是可以横着切也可以竖着切 代码 import java.util.*; public class Main { public static void main(String[] args) { final lon 阅读全文
posted @ 2024-04-04 21:44 Shie1d 阅读(75) 评论(0) 推荐(0)
摘要:题面 核心思想 正走一遍,反走一遍。 代码 import java.util.*; public class Main { public static void main(String[] args) { final long MOD = (long) (1e9 + 7); Scanner scan 阅读全文
posted @ 2024-04-03 22:02 Shie1d 阅读(87) 评论(0) 推荐(0)
摘要:题面 核心思想 贪心 最大 最小 次大 次小 ····· 这样就行了。 代码 import java.util.*; public class Main { public static void main(String[] args) { final long MOD = (long) (1e9 + 阅读全文
posted @ 2024-04-03 21:33 Shie1d 阅读(99) 评论(0) 推荐(0)
摘要:题面 核心思想 模拟 需要注意的是 1~n 只会出现一次 所有nums[i] 如果等于x(或y),下一位等不等于y(或x),就可以直接判断出结果了。 代码 import java.util.*; public class Main { public static void main(String[] 阅读全文
posted @ 2024-04-03 21:23 Shie1d 阅读(86) 评论(0) 推荐(0)
摘要:题面 核心思想 树形DP dp[1]表示以当前节点为根节点以及所包含的子树 且 当前节点能染色的最大染色数量 dp[0]表示以当前节点为根节点以及所包含的子树 且 当前节点不染色的最大染色数量 dp[0]好算,只用把孩子节点的dp值取max累加就好了 dp[1] 假设当前节点为cur,cur能和孩子 阅读全文
posted @ 2024-04-02 17:25 Shie1d 阅读(449) 评论(0) 推荐(0)
摘要:题面 核心思想 首先对于本来就匹配的肯定不能动 第一次遍历 对于匹配的res++ 对于不匹配的 用HashMap<Character, List> mp 存放当s[i]!=t[i]时 字符t[i]的下标i,表示t[i]的这个字符出现在t的位置 然后我们在做一次遍历 当s[i]!=t[i]时 且 t 阅读全文
posted @ 2024-04-02 14:36 Shie1d 阅读(197) 评论(0) 推荐(1)
摘要:题面 核心思想 折扣价不能大于原价 原价才能参与满家 原价、折扣价和满减的价格都必须是正实数 格式化输出 代码 import java.util.*; public class Main { public static void main(String[] args) { final long MO 阅读全文
posted @ 2024-04-02 13:54 Shie1d 阅读(94) 评论(0) 推荐(0)
摘要:核心思想 大模拟 -。-,还是不够细心,面向样例编程,一路错过去的。 主要的想法还是转成int 数字再处理 请看注释 写得太丑了 凑合看吧。 代码 import java.util.*; public class Main { public static void main(String[] arg 阅读全文
posted @ 2024-04-02 10:52 Shie1d 阅读(81) 评论(0) 推荐(0)
摘要:核心思想 贪心的选择 a最大 + b最小 想想如果 a最大的加上b最小的 都能越出边界,那岂不是就没有数字能够让结果在区间内了。 题目说重排a,既然a的位置没要求(随便挪),反过来b也是随便挪的。 代码 import java.util.*; public class Main { public s 阅读全文
posted @ 2024-04-02 10:46 Shie1d 阅读(62) 评论(0) 推荐(0)
摘要:核心思想 第一天施肥浇水 第二天浇水 第三天浇水 定义以上操作为一轮 先计算能够操作多少轮,那么剩下的只能在一轮中完成,剩下的成长值模拟下就好。 代码 import java.util.*; public class Main { public static void main(String[] a 阅读全文
posted @ 2024-04-02 10:42 Shie1d 阅读(111) 评论(0) 推荐(0)
摘要:核心思想 贪心,每次选最大的两个~ 代码 import java.util.*; public class Main { public static void main(String[] args) { final long MOD = (long) (1e9 + 7); Scanner scann 阅读全文
posted @ 2024-04-02 10:37 Shie1d 阅读(58) 评论(0) 推荐(0)
摘要:核心思想 模拟就完了 代码 import java.util.*; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int n = scann 阅读全文
posted @ 2024-04-02 10:27 Shie1d 阅读(49) 评论(0) 推荐(0)
摘要:核心思想 用一个set存储还没有球的盒子 一旦有2操作 那就剩下1个盒子没有球 代码 import java.util.*; public class Main { public static void main(String[] args) { TreeSet<Integer> q = new T 阅读全文
posted @ 2024-04-01 19:42 Shie1d 阅读(69) 评论(0) 推荐(0)
摘要:题面 核心思想 如果一段区间内的数平均值为k,那么每个数减去k之后平均值就为0 所以每个数-k 然后计算前缀和并放入map 其中:key=前缀和 value=当前下标 出现重复的前缀和preSum 说明存在平均值为k的区间 [mp.get[preSum] + 1, i] 由于需要最长的子数组 所以只 阅读全文
posted @ 2024-04-01 17:19 Shie1d 阅读(98) 评论(0) 推荐(0)