88 连续字串和的整除问题
问题理解
- 连续子序列:我们需要找到所有可能的连续子序列,并计算它们的和。
- 整除条件:一个子序列的和能够被
b整除,意味着这个和模b的余数为 0。
解题思路
- 初始化一个哈希表
remainderCount来记录每个余数的出现次数。 - 遍历序列,计算前缀和,并更新哈希表。
- 如果某个余数已经出现过,说明存在满足条件的子串。
核心代码
关键知识点
- 前缀和的概念:
-
- 前缀和数组
prefixSum记录从序列开始到当前位置的和。 prefixSum[i]表示a[0] + a[1] + ... + a[i]。
- 前缀和数组
- 利用哈希表优化:
-
- 我们可以使用哈希表来记录前缀和模
b的余数出现的次数。 - 如果
prefixSum[i] % b == prefixSum[j] % b,那么a[i+1] + a[i+2] + ... + a[j]的和能够被b整除。
- 我们可以使用哈希表来记录前缀和模
101 兔群繁殖之谜
问题理解
根据题目描述,这是一个典型的斐波那契数列问题。
解题思路
- 初始化:我们需要初始化前两个月的兔子对数。
- 迭代计算:从第三个月开始,每个月的兔子对数是前两个月兔子对数之和。
- 返回结果:返回第
n个月的兔子对数。
核心代码
关键知识点
斐波那契数列的定义:
- F(1) = 1
- F(2) = 2
- F(n) = F(n-1) + F(n-2) 对于 n > 2
130 字符串最短循环子串
问题理解
循环子串:一个字符串 s 是由子串 t 循环构成的,意味着 s 可以表示为 t + t + ... + t。例如, "abcabcabcabc" 是由 "abc" 循环构成的。
解题思路
- 遍历可能的子串长度:从1到字符串长度的一半(因为最短的循环子串长度不可能超过字符串长度的一半)。
- 检查子串是否能构成原字符串:
-
- 对于每个子串长度,提取子串并重复拼接,直到长度不小于原字符串。
- 检查拼接后的字符串是否等于原字符串。
核心代码
154 小C点菜问题
解题思路
- 过滤价格:首先,我们需要过滤掉所有价格超过
m的菜品。 - 统计价格频率:对于剩余的价格,统计每个价格的频率。
- 找出最大频率:在统计的价格频率中,找出最大的频率值,这个值就是小C最多可以点的菜的数量。