获得徽章 0
- #刷题交流# 数字倍数问题
计算单个倍数的个数:
计算在区间 [l, r] 内,a 的倍数的个数。
计算在区间 [l, r] 内,b 的倍数的个数。
计算在区间 [l, r] 内,c 的倍数的个数。
处理重复计数:
由于一个数可能是多个数的倍数(例如,6 是 2 和 3 的倍数),我们需要减去这些重复计数。
计算在区间 [l, r] 内,a 和 b 的公倍数的个数。
计算在区间 [l, r] 内,a 和 c 的公倍数的个数。
计算在区间 [l, r] 内,b 和 c 的公倍数的个数。
计算在区间 [l, r] 内,a、b 和 c 的公倍数的个数。
应用容斥原理:
使用容斥原理来计算总的个数:
[
\text{总数} = (\text{a的倍数个数} + \text{b的倍数个数} + \text{c的倍数个数}) - (\text{a和b的公倍数个数} + \text{a和c的公倍数个数} + \text{b和c的公倍数个数}) + \text{a、b和c的公倍数个数}
]展开评论点赞 - #刷题交流# 数组递增操作问题
初始检查:首先检查 list1 是否已经是严格递增的序列。如果是,直接返回 0。
动态规划:使用动态规划来记录每个位置的最少替换次数。
定义一个二维数组 dp,其中 dp[i][0] 表示不替换 list1[i] 时的最少替换次数,dp[i][1] 表示替换 list1[i] 时的最少替换次数。
对于每个位置 i,考虑两种情况:
不替换 list1[i],则 list1[i] 必须大于 list1[i-1] 或替换后的 list1[i-1]。
替换 list1[i],则从 list2 中选择一个合适的元素替换 list1[i],并确保替换后的序列仍然是严格递增的。
边界条件:处理第一个元素时,需要特别注意。
结果:最终结果是 dp 数组中最后一个位置的最小值展开评论点赞 - #刷题交流# 字符串chhc子串权值求和
初始化计数器:我们需要一个计数器来记录 "chhc" 的出现次数。
遍历字符串:我们可以使用两个指针来遍历字符串,一个指针用于定位子串的起始位置,另一个指针用于检查当前子串是否包含 "chhc"。
检查子串:对于每一个起始位置,我们检查从该位置开始的子串是否包含 "chhc"。如果包含,则计数器加一。
累加结果:最终,我们将所有子串中 "chhc" 的出现次数累加起来,得到最终结果。展开评论点赞 - #刷题交流# 红色格子染色方案数计算
定义状态:
设 dp[i] 表示从第 i 个格子开始,将所有格子染成红色的不同方式数。
初始化:
如果第 i 个格子是红色的(即 s[i] == '1'),则 dp[i] = 1。
如果第 i 个格子是未染色的(即 s[i] == '0'),则 dp[i] = 0。
状态转移:
对于每个格子 i,如果它是红色的,我们可以考虑将其左右相邻的未染色格子染成红色。
具体来说,如果 s[i] == '1',则:
如果 i + 1 是未染色的格子,则 dp[i + 1] += dp[i]。
如果 i - 1 是未染色的格子,则 dp[i - 1] += dp[i]。
最终结果:
最终的结果是所有格子都被染成红色的不同方式数之和,即 sum(dp)。展开1点赞 - #刷题交流# 严格数组判断
检查数组是否严格升序:
遍历数组,检查每个元素是否小于下一个元素。
如果发现某个元素不小于下一个元素,则返回 False。
检查相邻元素的差值是否严格降序:
计算相邻元素的差值,并存储在一个新的数组 b 中。
遍历数组 b,检查每个差值是否大于下一个差值。
如果发现某个差值不大于下一个差值,则返回 False。
**如果以上两个条件都满足,则返回 True**。展开评论点赞 - #刷题交流# 排列询问问题
遍历数组:从第一个元素开始,遍历到倒数第二个元素。
检查相邻元素:对于每个元素 a[i],检查它是否等于 x 并且它的下一个元素 a[i+1] 是否等于 y,或者反过来,a[i] 是否等于 y 并且 a[i+1] 是否等于 x。
返回结果:如果在遍历过程中找到相邻的 x 和 y,则返回 True;如果遍历结束仍未找到,则返回 False。展开评论点赞 - #刷题交流# 逆序对的操作次数问题
初始检查:遍历数组,检查是否存在逆序对。
计算操作次数:
对于每个元素 a_i,计算将其增加 x 或减少 y 后,是否能与其他元素形成逆序对。
记录所有可能的操作次数,并选择最小的操作次数。展开评论点赞 - #刷题交流# 数组权值计算
计算奇数和偶数的数量:首先,计算从1到n中有多少个奇数和偶数。
排列的权值计算:
对于每个排列,计算相邻的奇数对的数量。
由于排列的总数是 n!,我们需要考虑所有排列的权值之和。
组合数学的应用:
计算在所有排列中,相邻的奇数对的数量。
使用组合数学来计算这些对的数量。展开评论点赞 - #刷题交流# 数字翻译成字符串
定义状态:我们可以使用一个数组 dp,其中 dp[i] 表示前 i 位数字的翻译方法数。
初始化:dp[0] = 1,表示空字符串有一种翻译方法。
状态转移:
如果当前数字可以单独翻译成一个字母(即数字在0到9之间),则 dp[i] += dp[i-1]。
如果当前数字和前一个数字可以组合翻译成一个字母(即组合数字在10到25之间),则 dp[i] += dp[i-2]。
结果:最终结果为 dp[n],其中 n 是数字的长度。展开评论点赞
![[拳头]](http://lf-web-assets.juejin.cn/obj/juejin-web/xitu_juejin_web/img/jj_emoji_122.b3763ee.png)