2016-06-06 4 views
0

Мне нужно найти те же значения (если есть) в обоих массивах. Я думаю, что он будет работать с Binary Search, но я не знаю, как это сделать. например:Как я могу сравнить значения в двух несортированных int-массивах?

g1[95 78 99 95 35 65 95] 
    g2[67 100 95 76 95 99 60] 

    the function returns 2 (for 95 and 99). 
+0

Похоже, домашнее задание/вопрос интервью. Любые требования к скорости/потреблению памяти/использованию LINQ? – Dennis

ответ

0

Попробуйте

int compare(int g1[], int g2[]) 
{ 
    int count = 0; 
    for(int i=0; i < g1.length; i++) 
    { 
     for(int j=0; j < g2.length; j++) 
     { 
      if(g1[i] == g2[j]) 
      count = count + 1; 
     } 
    } 
    return count; 
} 

Этот код сравнить каждый элемент массива g1 со всеми второй (g2) , если он найдет элемент, равный приращению счетчика. Код немного большой, но я думаю, вам будет легче понять, как это работает.

1

Вы можете использовать Enumerable.Intersect:

int[] duplicates = g1.Intersect(g2).ToArray(); 

Если вы просто хотите знать количество дублей:

int duplicates = g1.Intersect(g2).Count(); 
0

Тест

  int[] g1 = { 95, 78, 99, 95, 35, 65, 95 }; 
      int[] g2 = { 67, 100, 95, 76, 95, 99, 60 }; 

      int[] results = g1.Where(x => g2.Contains(x)).Distinct().ToArray(); 
1

You Калифорния п использовать LINQ Intersect

 var g1 = new[] { 95, 78, 99, 95, 35, 65, 95 }; 
     var g2 = new[] { 67, 100, 95, 76, 95, 99, 60 }; 
     var result = g1.Intersect(g2).Count(); 
0

Вложенный для каждого должен сделать:

void a(int[] g1, int[] g2) 
{ 
    int counter = 0; 
    foreach (var x in g1) 
    { 
     foreach (var y in g2) 
     { 
      if (y == x) counter++; 
     } 
    } 
} 
0

Использовать перекрестный var r = g1.Intersect (g2) и использовать цикл foreach для получения значения из r.

1
Var duplicates = g1.Intersect(g2).Count(); 

Надеюсь, это поможет.

Смежные вопросы