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

仅用数组实现两整型数组投影功能,解决索引越界与结果错误问题

问题根因分析

你现有代码的问题完全来自逻辑方向错误和索引使用不当,具体如下:

  • 计数逻辑完全错误:你用双层循环每次匹配到相同元素就计数+1,会重复统计。比如arr1=[1,1],arr2=[1],你算出来的计数是2,但实际投影结果仅包含1个元素。同时你使用arr1的遍历索引i作为结果数组的下标,当计数结果小于arr1长度时,i就会超过结果数组的最大下标,直接触发ArrayIndexOutOfBoundsException。
  • 遍历主体颠倒:需求要求投影时保留第二个数组的原有顺序,你应该遍历第二个入参数组,逐个判断元素是否在第一个入参数组中存在,符合条件才加入结果。你现有逻辑是遍历第一个数组匹配第二个,输出顺序完全不对,未赋值的结果数组位置会保留int默认值0,就会出现你遇到的末尾多0的情况。
正确实现

完全使用基础数组实现,没有引入任何工具类,代码如下:

public int[] project(int[] arr1, int[] arr2) {
    // 第一步:统计arr2中存在于arr1的元素总数,确定结果数组长度
    int resultLen = 0;
    for (int targetNum : arr2) {
        if (isExist(arr1, targetNum)) {
            resultLen++;
        }
    }

    // 第二步:遍历arr2按顺序收集符合条件的元素
    int[] result = new int[resultLen];
    int writeIndex = 0;
    for (int targetNum : arr2) {
        if (isExist(arr1, targetNum)) {
            result[writeIndex] = targetNum;
            writeIndex++;
        }
    }
    return result;
}

// 辅助方法:判断目标值是否存在于指定数组中
private boolean isExist(int[] arr, int target) {
    for (int num : arr) {
        if (num == target) {
            return true;
        }
    }
    return false;
}

如果你不想单独封装辅助方法,可以把isExist的逻辑直接嵌套到循环中,运行效果完全一致。

效果验证

  • 输入arr1 = [1, 3, 5, 3],arr2 = [2, 1, 6, 3, 1, 4, 5, 3],输出结果为[1, 3, 1, 5, 3]
  • 输入arr1 = [2, 1, 6, 3, 1, 4, 5, 3],arr2 = [1, 3, 5, 3],输出结果为[1, 3, 5, 3]
    完全符合需求要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 17:24:01