Существует более быстрое решение со сложностью O (nlogn), не уверенное в O (n).
Подсказка: используйте метод с двумя указателями.
Сначала отсортируйте массив.
Есть два указателя - один начинается с индекса 0 и увеличивается, а другой начинается споследний индекс и убывающий.
Пусть значение, начинающееся с 0, будет a , а значение, начинающееся с последнего индекса b .
Если a + b больше целевого значения, то мы должны уменьшить индекс b . Помните, что числа перед индексом b меньше, чем число в индексе b .
Если a + bменьше целевого значения, мы должны увеличить индекс a , поскольку числа после индекса a образуют возрастающую последовательность.
sort(v.begin(), v.end());
while(b>a){
if (v[a]+v[b]==target) {
//There exists such values
return 0;
}
else if (v[a]+v[b]>target) {
b--;
}
else {
a++;
}
}