Я пытаюсь решить эту проблему из testdome. Я думаю, что мой подход к решению не является оптимальным (или даже правильным). Но перед тем, как изменить свой подход, мне было интересно, можно ли вернуть вектор пар? если да, то как? Ниже вы увидите вызов, а затем мой код. Спасибо.
#include <stdexcept>
#include <iostream>
#include <vector>
#include <utility>
std::pair<int, int> findTwoSum(const std::vector<int>& list, int sum)
{
int tracker = list.size();
std::pair <int, int> result;
std::vector <std::pair <int,int>> list1(100);
for (int i = 0; i < (int)list.size(); i++){
for (int j = ((int)list.size()-tracker); j < (int)list.size(); j++){
if (list[i]+list[j] == sum)
list1.push_back(std::make_pair(list[i], list[j]) );
}
tracker--;
}
return list1; // I am stuck here
//throw std::logic_error("Waiting to be implemented");
}
#ifndef RunTests
int main()
{
std::vector<int> list = {3, 1, 5, 7, 5, 9};
std::pair<int, int> indices = findTwoSum(list, 10);
std::cout << indices.first << '\n' << indices.second;
}
#endif
РЕДАКТИРОВАТЬ
Изначально это было мое решение. Но как только я разместил это на testdome, я получаю ноль правильных ответов из 4 категорий. Это тест номер 5 . Вот почему я подумал, что возвращать только один ответ было неправильно.
#include <stdexcept>
#include <iostream>
#include <vector>
#include <utility>
std::pair<int, int> findTwoSum(const std::vector<int>& list, int sum)
{
int tracker = list.size();
std::pair <int, int> result;
std::vector <std::pair <int,int>> list1(100);
for (int i = 0; i < (int)list.size(); i++){
for (int j = ((int)list.size()-tracker); j < (int)list.size(); j++){
if (list[i]+list[j] == sum)
return result=std::make_pair(list[i], list[j]);
}
tracker--;
}
return std::make_pair(-1,-1);
//throw std::logic_error("Waiting to be implemented");
}
#ifndef RunTests
int main()
{
std::vector<int> list = {3, 1, 5, 7, 5, 9};
std::pair<int, int> indices = findTwoSum(list, 10);
std::cout << indices.first << '\n' << indices.second;
}
#endif