2140.解决智力问题
方法思路本题可以通过动态规划来解决,其思路类似于背包问题中的选择与不选择当前物品的决策。每个问题可以选择解决或不解决,解决当前问题会获得分数,但必须跳过后续若干个问题。我们需要通过动态规划来记录每个位置的最大分数,从而得到最终结果。
类比背包问题在背包问题中,每个物品可以选择拿或不拿,拿的话会占用一定容量并获得价值。这里的问题类似,每个问题可以选择解决或不解决,解决的话会获得分数,但必须跳过后续若干个问题,相当于占用了后续的位置。因此,我们可以将每个问题视为一个物品,其价值为对应的分数,而选择该物品会影响后续物品的选择。
解决思路
状态定义:定义 f[i] 表示处理到第 i 个问题时的最大分数。
状态转移:
不解决当前问题:此时最大分数直接传递到下一个问题,即 f[i+1] = max(f[i+1], f[i])。
解决当前问题:获得当前问题的分数,并跳过后续若干个问题,更新对应位置的最大分数。具体来说,解决第 i 个问题后,下一个可处理的问题位置为 j = i + brainpower + 1,这里需要确保 j 不超过总问题数 n。然后更新 f[j] = max(f[j], f[i] ...
2278.字母在字符串中的百分比
字符串匹配命中率计算题目链接2278.字母在字符串中的百分比
思路
将字符串转换为字符数组进行逐个匹配
统计命中次数,最终计算命中率(命中次数 / 总长度)
解题过程
使用String类型接收输入字符串
转换为字符数组进行遍历匹配
涉及包:java.lang(自动导入,无需显式声明)
复杂度分析
时间复杂度:$O(n)$线性遍历字符串一次
空间复杂度:$O(n)$需要创建字符数组存储空间
优化方案空间复杂度优化
使用charAt()方法替代字符数组转换
优化后空间复杂度:$O(1)$直接访问字符串中的字符,无需额外存储空间
代码实现1234567891011class Solution { public int percentageLetter(String s, char letter) { int count = 0; for (char a : s.toCharArray()) { if (a == letter) { count++; ...
实习总结(1)
分布式数据库
第一周体验(2-4天)
省流:读了两天代码+理解/制作需求
第一天小结
省流:社恐+看内部工具晕头转向的一天
SQL语法(2)
SQL 关键字:JOINS进行多表联合查询
SQL语法(1)
SQL 关键字:SELECT WHERE ORDER LIMIT LIKE IN