2017-01-21 18 views
0

我發現這個片段從編碼視頻由谷歌here檢查陣列中的其總和的一對元件是等於給定的總和

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

要檢查一對元件是否在一個數組,其總和存在是等於給定的總和,

以下測試例中的視頻作品如所解釋的,

  • {1,2,3,9}鑑於薩姆= 8
  • {1,2,4,4}鑑於薩姆= 8

1.But,我仍然困惑其下面的是正確

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

2.Also,如何將這種算法適合,

  • {1,2,4,6}鑑於薩姆= 8

回答

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

上面的代碼片段是正確的。他們正在做的是,他們在comp中添加互補值(即,如果sum爲8,則2具有互補值6),並且只要他們找到互補值,它們就會返回true。例如。

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

7加6加4相加,然後現在當他們搜索6不會返回comp.end,因此將進入,如果並返回true。