如何在两个数组之间计算相同数量的元素,不包括重复项

时间:2015-11-10 03:04:31

标签: arrays for-loop duplicates

所以我有 A = {1,3,3,4}
B = {5,4,7,3}

我想看看数组B的元素出现在数组A中的次数,但是,我只想在数组A中计算每个元素一次。因此,如果3次出现多次,则3只会被计算一次,所以向前。

这里我的答案是2,因为我有3,4在阵列B中也在阵列A中。

这是我到目前为止所做的:

int count = 0; 
for(int z = 0; z <4; z++)
    {
      for(int y = 0; y <4; y++)
      {
         if(arrayA[z] == arrayB[y])
         {
            count++; 
         }
      }//end for loop 
    }//end for loop 

当我跑步时,我得到3.我知道为什么。我在数组A {3,3,4}中计算重复数。我怎么不算他们?我被卡住了。

这是一个小功能,我一直坚持下去。

4 个答案:

答案 0 :(得分:2)

一个简单的解决方案可能是引入另一个数组来存储计数并用零初始化它(我使用c#所以默认情况下会将int数组初始化为0)。

        int[] totals = new int[10];
        int[] arrayA = new int[] { 1,3,3,4};
        int[] arrayB = new int[] { 5,4,7,3};
        for (int z = 0; z < 4; z++)
        {
            for (int y = 0; y < 4; y++)
            {
                if (arrayA[z] == arrayB[y])
                {
                    totals[arrayA[z]]++;
                }
            }//end for loop 
        }//end for loop

        // Count your numbers through indices 
        for (int i = 0; i < totals.Length; i++)
        {
          if (totals[i] > 0)
          {
            count++;
          }
        } //end for loop

答案 1 :(得分:1)

这是我的解决方案: 第1步:检查数组中是否存在元素。 第2步:遍历第一个数组中的每个元素。检查它是否存在于第二个数组中,并且不存在于结果数组中。

以下是我使用Swift的工具:

let A = [1,2,3,3,4,7]
let B = [3,4,1,2,5,7,8,3,2]
var C : [Int] = []

for (_,a) in A.enumerate() {
    if B.contains( a ) && !C.contains(a){
        C.append(a)
    }
}

希望有所帮助!

答案 2 :(得分:1)

它很简单,您可以使用(PHP语言)执行以下操作: 让:

$A = [1,2,3,4];
$B = [2,4,6,7];
$count = 0;
$b_count = array_count_values($B);
foreach($A as $val)
{
   if(in_array($val, $B) && $b_count[$val] == 1)
   {
      $count++;
   }
}
echo "Total number of elements =>  ".$count;

答案 3 :(得分:1)

如果你不考虑程序的运行时复杂性,你可以使用一些内置的库,比如map或set来轻松编码,但这里是

// complexity O( n * log(n) ), which is fast enough.
// language c++
#include<stdio.h>
#include<algorithm>
using namespace std;
int main()
{
    int i, j, count = 0;
    int A[] = {1,3,3,4}, B[] = {5,4,7,3};
    int lenA = 4, lenB = 4;

    // sorting, to overlook the repeated numbers.
    sort(A, A + lenA);
    sort(B, B + lenB);

    for(i=0, j=0; i<lenA; i++)
    {
        // ignoring the repeated A elements.
        if(i>0 && A[i] == A[i-1])
            continue;

        //we can ignore all the elements of B where it's less than current A element.
        //this can be assured because of sorting.
        while(j<lenB && B[j]<A[i])
            j++;

        if(A[i] == B[j])
        {
            count++;
            j++;
        }
    }

    printf("%d\n", count);

    return 0;
}