Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 31 additions & 0 deletions src/two-sum.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
// Подключаем заголовочный файл для использования типа std::size_t
#include <cstddef>

// Определяем константу для размера массива
#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; // Возвращаем признак того, что пара не найдена
}