You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

LeetCode数组配对和被k整除题代码仅过93/97用例调试求助

代码逻辑漏洞点

  • 遍历对象选择错误:你选择遍历原数组的每个元素,而非余数统计字典的key,会导致同一个余数的计数被重复扣减。比如处理完第一个余数为1的元素后,已经把余数1和余数k-1的计数扣减为0了,后续遍历到其他余数为1的元素时,还是会执行判断逻辑,很容易出现计数扣减错误。
  • 判断分支存在逻辑冲突:你处理完k-num == num的场景、扣减2次计数、新增1次配对后,没有结束当前元素的判断流程,会继续进入下一个if (k-num) in dictt的分支,导致多扣一次计数、多统计一次配对,直接导致统计结果错误。
  • 特殊余数处理逻辑错误:余数为0的场景需要和余数为0的元素配对,但你当前的k-num == num判断无法覆盖该场景(因为k - 0 = k ≠ 0),你把余数0的判断放在了和前一个if互斥的elif分支,很容易出现漏判。比如当存在奇数个余数为0的元素时,你的代码大概率会判断错误。

正确实现逻辑参考

你不需要遍历原数组做配对扣减,直接对余数统计字典做校验即可:

  1. 统计所有元素对k取模的余数出现次数
  2. 先校验余数为0的计数:必须是偶数,否则直接返回False
  3. 遍历余数r从1到k//2:
    • 如果r == k - r(仅当k为偶数,r=k/2时触发):则r的计数必须是偶数,否则返回False
    • 否则:余数r的出现次数必须等于余数k-r的出现次数,否则返回False
  4. 所有校验通过则返回True

对应修正后的代码参考:

def canArrange(self, arr: List[int], k: int) -> bool:
    mod_count = [0] * k
    for num in arr:
        mod = num % k
        mod_count[mod] += 1
    # 校验余数0的计数
    if mod_count[0] % 2 != 0:
        return False
    # 遍历1到k//2的余数
    for r in range(1, (k // 2) + 1):
        if r == k - r:
            if mod_count[r] % 2 != 0:
                return False
        else:
            if mod_count[r] != mod_count[k - r]:
                return False
    return True

内容的提问来源于stack exchange,提问作者Mayank Parashar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 19:48:02