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

Java数组两数和整除除数问题:排查未知RuntimeException原因

问题分析与修复方案

可能触发的运行时异常

  • OutOfMemoryError(内存溢出):当divisor取值接近上限1e9时,创建长度为divisor的int[] remainderCount会占用极大内存。int类型每个元素占4字节,若divisor=1e9,数组需4GB内存,远超题目1GB的内存限制,直接触发内存溢出异常。

修复方案

改用HashMap存储余数的出现次数,仅保留实际出现过的余数,避免无意义的大内存占用:

import java.util.HashMap;
import java.util.Map;

long solution(int[] nums, int divisor) {
    long result = 0;
    Map<Integer, Integer> remainderCount = new HashMap<>();
    for (int num : nums) {
        int r = num % divisor;
        // 计算需要匹配的余数:当r=0时,target为0;否则为divisor-r
        int target = (divisor - r) % divisor;
        result += remainderCount.getOrDefault(target, 0);
        // 更新当前余数的计数
        remainderCount.put(r, remainderCount.getOrDefault(r, 0) + 1);
    }
    return result;
}

关键修改说明

  1. 内存优化:HashMap仅存储数组中实际出现的余数,内存复杂度从O(divisor)降至O(k)(k为不同余数的数量,最大为nums.length=1e5),完全符合内存限制。
  2. 逻辑简化:通过(divisor - r) % divisor统一处理余数为0的情况,无需分支判断,逻辑更简洁且与原代码逻辑一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 17:57:24