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

排查判断两同长度无序数组元素是否一致的C语言代码问题

问题分析与修复方案

代码核心漏洞

你的代码仅验证了数组A的每个元素存在于数组B中,但没有校验元素的出现次数是否完全匹配。举个典型反例:

输入:

2
1 1
1 2

你的代码会返回yes,但实际应返回no——因为A包含两个1,而B仅包含一个1,元素的数量不匹配,这就是第4个测试用例失败的原因。

修复思路

有两种高效的修复方式:

方式1:排序后逐元素对比

将两个数组分别排序,然后逐个位置对比元素是否完全一致。若所有位置元素都相同,说明两个数组的元素(含出现次数)完全匹配。

方式2:标记已匹配元素(避免重复使用)

遍历A的每个元素时,在B中找到对应元素后,标记该元素已被使用(比如用额外的标记数组),防止后续元素重复匹配同一个B中的元素。

修复后代码(方式2示例)

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int n;
    scanf("%d", &n);
    long int a[n], b[n];
    int used[n]; // 标记B中元素是否已被匹配
    
    for (int i = 0; i < n; i++)
    {
        scanf("%ld", &a[i]);
        used[i] = 0; // 初始化标记为未使用
    }
    for (int i = 0; i < n; i++)
    {
        scanf("%ld", &b[i]);
    }
    
    int same = 1;
    for (int j = 0; j < n; j++)
    {
        int found = 0;
        for (int k = 0; k < n; k++)
        {
            // 仅匹配未被使用的元素
            if (!used[k] && a[j] == b[k])
            {
                found = 1;
                used[k] = 1; // 标记为已使用
                break; // 找到后立即退出内层循环
            }
        }
        if (!found)
        {
            same = 0;
            break;
        }
    }
    printf("%s\n", same ? "yes" : "no");
    return 0;
}

修复后代码(方式1示例)

#include <stdio.h>
#include <stdlib.h>

// qsort所需的比较函数
int compare(const void *a, const void *b)
{
    return (*(long int*)a - *(long int*)b);
}

int main()
{
    int n;
    scanf("%d", &n);
    long int a[n], b[n];
    
    for (int i = 0; i < n; i++)
    {
        scanf("%ld", &a[i]);
    }
    for (int i = 0; i < n; i++)
    {
        scanf("%ld", &b[i]);
    }
    
    // 对两个数组排序
    qsort(a, n, sizeof(long int), compare);
    qsort(b, n, sizeof(long int), compare);
    
    int same = 1;
    for (int i = 0; i < n; i++)
    {
        if (a[i] != b[i])
        {
            same = 0;
            break;
        }
    }
    printf("%s\n", same ? "yes" : "no");
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 01:40:13