【问题标题】:Code that compares two non-sorted int arrays. C比较两个未排序的 int 数组的代码。 C
【发布时间】:2015-02-18 02:13:50
【问题描述】:

我需要创建一个代码来比较两个数组而不对它们进行排序。它们必须具有相同的长度并以任何顺序包含相同的元素。

  • a[] 中的每个整数也在 b[] 中
  • b[] 中的每个整数也在 a[] 中
  • 所有这些常见值看起来都完全相同 a[] 和 b[] 中的次数

例子:

  • a = {1, 2, 3}, b = {2, 3, 4} 返回 0
  • a = {1, 2, 3}; b = {2, 3, 1} 返回 1
  • a = {1, 2, 2}; b = {2, 2, 1} 返回 1
  • a = {1, 2, 2}; b = {2, 1, 1} 返回 0
  • a = {1, 1, 2, 2, 2}; b = {2, 1, 2, 1, 2} 返回 1

我只是不知道该怎么办...

【问题讨论】:

  • 认为您需要为此做些什么?
  • 我不知道如何攻击这个..如果我被允许对数组进行排序,这将在几分钟内完成......但我只需要实现方面的帮助......
  • 是否允许使用辅助存储? (如果是,有限制吗?)您是否允许以任何方式重新排列ab 中的元素? ab 中的值是任意的还是限制在一个范围内?
  • 我不允许重新排列任何东西,我们可以使用辅助存储。 a 和 b 中的值仅限于所有 pos。数字

标签: c arrays integer return compare


【解决方案1】:

如果数组没有排序,你最终会得到一个二次算法。你可以在算法开始时检查数组长度,如果它们相等,比如 N,你会做这样的事情

      int result = 1;
          for (int j=0;j<N;j++) {
            bool found = false;
            for (int i=0;i<N && !found;i++) {
              if (a[j] == b[i]) found = true;
            }
            if (!found) return 0;
}

【讨论】:

  • 对于 {1,2,2};{2,1,1} 的情况不会正确返回 0
【解决方案2】:
I took sometime away and got it within a minute:D


int same_contents(int a[], int b[], int n){
int maxA=0,maxB=0,counterA=0,counterB=0;
int i,k,j,x;
for(i=0; i<n; ++i)
    if (a[i]>maxA)maxA=a[i];
for(i=0; i<n; ++i)
    if (b[i]>maxB)maxB=b[i];
if (maxA != maxB) return 0;
for(j=0;j<n;++j){
        counterA=0;
        counterB=0;
    for(k=0;k<n;++k){
        if(maxA==b[k])counterA++;
        if(maxA==a[k])counterB++;
    }
    if (counterA != counterB) return 0;
    else continue;
}
return 1;
}

【讨论】:

  • 尝试使用{1,2,2,3}{1,1,2,3}(甚至使用{1,3}{2,3})。 j 的循环有什么意义? j 不在任何地方使用。
  • 抱歉,您必须减少 maxA 和 maxB
  • 减少 maxA 和 maxB 只会在集合具有受限值的情况下在合理的时间内起作用。否则,将 {1,1000000000} 与 {2,1000000000} 进行比较将花费比人们想要的更长的时间。如果值被限制为小的正整数,那么有一个非常漂亮的算法,它在集合的大小上是线性的,但我没有提供它,因为给定的约束是集合被限制为“所有正数”。
【解决方案3】:

你可以试试这个!

#include<stdio.h>
int check_same_array(int a[], int b[],int lenA,int lenB)
{
    int result = 0;
    bool flag = false;
    int i = 0,j=0;
    if (lenA != lenB)
        return 0;
    for (i = 0; i < lenA; i++)
    {
        flag = false;
        for (j = 0; j < lenB; j++)
        {
            if (a[i] == b[j])
                flag = true;
        }
        if (!flag)
        {
            result = 0;
            break;
        }

    }
    if (flag)
        result = 1;
    return result;
}
int main()
{
    int a[5] = { 2, 2, 3, 3 ,5};
    int b[5] = { 3, 3, 2, 2 ,5};
    int lenA = sizeof(a) / sizeof(int);
    int lenB = sizeof(b) / sizeof(int);
    printf("%d\n", check_same_array(a, b, lenA, lenB) && check_same_array(b, a, lenB, lenA));
    return 0;
}

check_same_array用于检查数组A中的每一项是否在数组B中。
所以如果数组 A 中的每一项都在数组 B 中,而数组 B 中的每一项都在数组 A 中。
两个数组的item是一样的。

【讨论】:

  • 这不会正确处理重复的元素,例如它比较 {1, 1, 2} 和​​ {1, 2, 2} 相等。
  • 让我考虑到这一点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-19
  • 2013-08-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-20
相关资源
最近更新 更多