2016-06-06 17 views
0

Ich muss die gleichen Werte (wenn es gibt) in beiden int-Arrays finden. Ich denke, es würde mit Binary Search funktionieren, aber ich weiß nicht genau, wie es geht. zB:Wie kann ich Werte in zwei unsortierten int Arrays vergleichen?

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

Sieht aus wie Hausaufgaben/Interview Frage. Irgendwelche Anforderungen bezüglich Geschwindigkeit/Speicherverbrauch/LINQ-Nutzung? – Dennis

Antwort

0

starten

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; 
} 

Dieser Code vergleichen jedes Array-Element von G1 mit allen der zweiten (g2) Wenn er ein Element findet, wird der Zähler gleich erhöht. Der Code ist ein wenig groß, aber ich denke, es ist einfacher für Sie zu verstehen, wie es funktioniert

1

könnten Sie verwenden Enumerable.Intersect:

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

Wenn Sie nur die Anzahl der Duplikate wissen wollen:

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

Versuchen Sie, diese

  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

Sie ca n LINQ verwenden 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

A für jede geschachtelte tun sollten:

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

Verwenden Sie Schnittpunkt var r = g1.Intersect (g2) und foreach-Schleife verwenden, um Wert von r zu erhalten.

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

Ich hoffe, es hilft.

Verwandte Themen