掘友等级
获得徽章 0
#刷题交流# 好排列的数量计算
理解奇数和偶数的分布:
奇数和偶数的乘积是奇数,因此相邻的两个数不能都是奇数。
偶数和偶数的乘积是偶数,奇数和偶数的乘积也是偶数。
排列的构造:
如果 n 是偶数,我们可以将所有偶数放在一起,所有奇数放在一起,然后交替排列。例如,对于 n = 4,排列可以是 [2, 4, 1, 3]。
如果 n 是奇数,我们可以将所有偶数放在一起,所有奇数放在一起,然后交替排列。例如,对于 n = 5,排列可以是 [2, 4, 1, 3, 5]。
计算排列的数量:
对于偶数 n,排列的数量是 (n/2)! * (n/2)!,因为我们可以将偶数和奇数分别排列,然后交替放置。
对于奇数 n,排列的数量是 (n//2)! * (n//2 + 1)!,因为偶数和奇数的数量不同。
取模运算:
由于结果可能非常大,我们需要对结果取模 10^9 + 7。
#刷题交流# 分割数字串获取3的倍数问题
遍历数字串:从左到右遍历数字串,尝试找到尽可能多的3的倍数的子串。
动态规划:可以使用动态规划来记录当前位置之前的最优分割方案。
检查子串是否为3的倍数:在遍历过程中,检查当前子串是否为3的倍数。
更新最优解:如果当前子串是3的倍数,更新最优解并继续寻找下一个子串。
#刷题交流# 多米诺骨牌等价对的数量
标准化多米诺骨牌:对于每张多米诺骨牌 [a, b],将其标准化为 [min(a, b), max(a, b)]。
统计出现次数:使用哈希表统计每个标准化后的多米诺骨牌的出现次数。
计算等价对数:对于每个出现次数 count,计算等价对数。等价对数可以通过组合公式 C(count, 2) = count * (count - 1) / 2 计算
#刷题交流# 双数配对策略
初始化一个哈希表,用于记录每个数字出现的次数。
遍历数组,对于每个数字 num:
计算 complement = k - num,即与当前数字配对的另一个数字。
检查哈希表中是否存在 complement:
如果存在,说明找到了一对满足条件的数对,将这对数对的数量加到结果中。
更新哈希表中 num 的出现次数。
返回结果,即满足条件的数对数量。
#刷题交流# 修改字符串中的字母,使得字符串中至少包含 m 个 uccu 子串
初始化:
统计当前字符串中 uccu 子串的数量。
如果当前 uccu 子串的数量已经大于等于 m,则直接返回 0。
计算最小修改次数:
如果当前 uccu 子串的数量小于 m,则需要通过修改字符串来增加 uccu 子串的数量。
遍历字符串,尝试将每个位置的字符修改为 u、c 或 u,并计算修改后的 uccu 子串数量。
选择使得 uccu 子串数量增加最多的修改,并记录修改次数。
返回结果:
如果通过修改可以达到目标,则返回最小修改次数。
如果无法达到目标,则返回 -1。
#刷题交流# 字符串修改最少次数计算
初始化计数器:用于记录需要进行的修改次数。
遍历字符串:从第二个字符开始,逐个检查当前字符与前一个字符是否相同。
检查相邻字符:如果当前字符与前一个字符相同,则增加计数器,并移动到下一个字符。
返回结果:遍历结束后,计数器的值即为最少需要进行的修改次数。
#刷题交流# 数组坡的最大宽度问题
初始化:创建一个空栈 stack 和一个变量 max_width 来记录最大宽度,初始值为 0。
遍历数组:从左到右遍历数组 A,对于每个元素 A[j]:
如果栈不为空且 A[stack[-1]] <= A[j],说明找到了一个坡,计算宽度 j - stack[-1],并更新 max_width。
如果栈为空或 A[stack[-1]] > A[j],将当前索引 j 压入栈中。
返回结果:遍历结束后,max_width 即为所求的最大宽度。
#刷题交流# 和的逆运算
对 sums 进行排序。
从最小的和开始,假设最小的和是两个最小的数相加的结果。
递归推导出所有的数,每次推导出一个数后,更新剩余的和。
如果在推导过程中发现某个和无法匹配,则输出 "Impossible"。
如果成功推导出所有的数,则按非降序排序输出这些数。
#刷题交流# 子序列计数问题
初始化两个指针 left 和 right 都指向数组的起始位置。
移动 right 指针,扩大窗口,直到窗口内的最大值和最小值之差超过 k。
当窗口不满足条件时,移动 left 指针,缩小窗口,直到窗口再次满足条件。
在每次移动 right 指针时,计算当前窗口内的子序列数量,并累加到结果中。
#刷题交流# 括号匹配策略
初始化:
创建一个栈来存储左括号。
初始化一个计数器 modifications 来记录需要修改的次数。
遍历字符串:
对于每个字符,如果是左括号((, [, {, <),将其压入栈中。
如果是右括号(), ], }, >),检查栈顶的左括号是否匹配:
如果匹配,弹出栈顶的左括号。
如果不匹配,增加 modifications 计数器,并继续处理下一个字符。
处理剩余的左括号:
遍历结束后,栈中可能还剩下未匹配的左括号,这些都需要修改成匹配的右括号。
返回结果:
返回 modifications 计数器的值,即为最少需要修改的次数。
下一页