2017-01-21 7 views
0

ich diesen Ausschnitt aus einer Kodierung Video von Google herePrüfen für ein Paar von Elementen in einer Anordnung, deren Summe gleich gegebene Summe

bool HasPairWithSum(const vector<int> data, int sum){ 
    unordered_set<int> comp; //complements 
    for(int value : data){ 
     if(comp.find(value) != comp.end) 
     return true; 
     comp.add(sum - value); 
    } 
    return false; 
} 

Um zu überprüfen, ob das Paar von Elementen besteht in einer Reihe, deren Summe gefunden ist an gegebener Summe gleich

folgende Testfälle in dem Video wie erläuterte WORKS,

  • {1, 2, 3, 9} gegeben Sum = 8
  • {1, 2, 4, 4} Da Summe = 8

1.But, ich bin immer noch, welche der folgenden korrekt

if(comp.find(value) != comp.end) // as in snippet or 
if(comp.find(value) == comp.end) // this one 

2.Also, wie würde dieser Algorithmus verwirrt passen,

  • {1, 2, 4, 6} Gegeben Sum = 8

Antwort

0
if(comp.find(value) != comp.end) 

Das obige Snippet ist korrekt. Was sie tun ist, dass sie komplementären Wert addieren (dh, wenn Summe 8 ist, dann hat 2 komplementären Wert 6) in comp und sobald sie einen komplementären Wert finden, geben sie wahr zurück. Z.B.

{1, 2, 4, 6} Given Sum = 8 

7 angefügt 6 4 hinzugefügt wird, hinzugefügt wird und dann jetzt, wenn sie für 6 Suche wird es nicht comp.end zurückkehren und somit treten wird, wenn und true zurück.

Verwandte Themen