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

数组交集求解C++代码输出异常:问题定位与修正咨询

数组交集代码问题排查与修正

问题概述

给定两个大小分别为n和m的数组arr1与arr2,求解数组的交集。编写的C++代码运行后输出结果与预期不符:

输入:
6
4
1 2 2 2 3 4
2 2 3 3
实际输出:2233
预期输出:223

错误定位

  1. 输入函数调用参数错误
    main函数中调用inputarray时,错误使用了未定义的变量arr,正确参数应为arr1和arr2。这个错误会导致数组内容被错误赋值(甚至编译失败),是输出不符合预期的直接原因。

  2. 潜在逻辑隐患
    当前用INT_MIN标记已匹配元素的方式,仅适用于数组中无INT_MIN值的场景,不具备通用性;同时固定大小的数组可能在输入规模超出限制时引发越界问题。

修正方案

1. 修复输入函数调用

将main函数中的错误调用:

inputarray(arr,size1);
inputarray(arr,size2);

替换为:

inputarray(arr1, size1);
inputarray(arr2, size2);

2. 优化逻辑(可选,增强通用性)

如果需要处理包含INT_MIN的数组,或追求更高效的实现,可以改用哈希表统计元素出现次数:

  • 先用哈希表记录arr2中每个元素的出现次数
  • 遍历arr1,若元素在哈希表中存在且计数>0,则输出该元素并将计数减1

这种方法时间复杂度为O(n+m),且避免了修改原数组的问题。

修正后的完整代码

基础修复版(保留原逻辑,修复输入错误)

#include<iostream>
#include<climits>
using namespace std;

void inputarray(int arr[], int size){
    for(int i=0; i<size; i++){
        cin >> arr[i];
    }
}

void logic(int arr1[], int size1, int arr2[], int size2){
    for(int i=0; i<size1; i++){
        int element = arr1[i];
        for(int j=0; j<size2; j++){
            if(element == arr2[j]){
                cout << element;
                arr2[j] = INT_MIN;
                break;
            }
        }
    }
}

int main(){
    int arr1[100];
    int arr2[100];
    int size1;
    cin >> size1;
    int size2;
    cin >> size2;

    inputarray(arr1, size1);
    inputarray(arr2, size2);
    logic(arr1, size1, arr2, size2);

    return 0;
}

优化版(哈希表实现)

#include<iostream>
#include<unordered_map>
using namespace std;

void inputarray(int arr[], int size){
    for(int i=0; i<size; i++){
        cin >> arr[i];
    }
}

void logic(int arr1[], int size1, int arr2[], int size2){
    unordered_map<int, int> countMap;
    // 统计arr2中元素的出现次数
    for(int i=0; i<size2; i++){
        countMap[arr2[i]]++;
    }
    // 遍历arr1输出交集
    for(int i=0; i<size1; i++){
        if(countMap[arr1[i]] > 0){
            cout << arr1[i];
            countMap[arr1[i]]--;
        }
    }
}

int main(){
    int size1, size2;
    cin >> size1 >> size2;
    int* arr1 = new int[size1];
    int* arr2 = new int[size2];

    inputarray(arr1, size1);
    inputarray(arr2, size2);
    logic(arr1, size1, arr2, size2);

    delete[] arr1;
    delete[] arr2;
    return 0;
}

验证结果

修复输入错误后,运行基础版代码,输入给定测试用例,输出为223,与预期一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 01:35:16