diff --git a/src/two-sum.cpp b/src/two-sum.cpp new file mode 100644 index 0000000..dc5f579 --- /dev/null +++ b/src/two-sum.cpp @@ -0,0 +1,31 @@ +// Подключаем заголовочный файл для использования типа std::size_t +#include + +// Определяем константу для размера массива +#define ARRAY_SIZE 5 + +// Функция для поиска двух чисел в массиве, дающих в сумме target +bool two_sum(const int nums[ARRAY_SIZE], const int target, std::size_t& index0, std::size_t& index1) { + + // Наивный алгоритм поиска с двойным циклом (сложность O(n^2)) + // Внешний цикл: перебираем все элементы массива как первый элемент пары + for (std::size_t i = 0; i < ARRAY_SIZE; ++i) { + // Внутренний цикл: перебираем все элементы после текущего как второй элемент пары + // Начинаем с i + 1 чтобы избежать: + // - проверки пары с самим собой (i == j) + // - повторной проверки одних и тех же пар в разном порядке (например, (i,j) и (j,i)) + for (std::size_t j = i + 1; j < ARRAY_SIZE; ++j) { + // Проверяем, равна ли сумма текущей пары элементов целевому значению + if (nums[i] + nums[j] == target) { + // Пара найдена! + // Сохраняем индексы в выходные параметры: + index0 = i; // Меньший индекс (гарантированно меньше j благодаря условию цикла) + index1 = j; // Больший индекс + return true; // Немедленно возвращаем успех + } + } + } + + // Если выполнение дошло до этой точки, значит, ни одна пара не дала нужную сумму + return false; // Возвращаем признак того, что пара не найдена +} \ No newline at end of file