-
Notifications
You must be signed in to change notification settings - Fork 0
/
1. Two Sum.txt
29 lines (24 loc) · 1.12 KB
/
1. Two Sum.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
//Можно решить и обычным перебором с двумя циклами, но это медленнее.
//Смысл такой. Нам надо найти два числа которые в сумме дают target. a + b = target.
//Получается комплемент (искомое число) = target - текущее число; b = target - a;
//Каждый шаг цикла вычисляем искомое число и запоминаем его в хэш таблице unordered_map.
//Как я понял хеш таблица это массив который не надо переберать (Там само всё делается).
// В ней мы присваеваем текущему числу его индекс.
//Если в этой хеш таблице уже есть нужное нам искомое число, возвращаем его индекс и индекс текущего числа.
//Если нет, то запоминаем текущее число в хеш таблице и продолжаем цикл.
//Возвращаем ничего если нет решения.
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
unordered_map<int, int> numMap;
int n = nums.size();
for (int i = 0; i < n; i++) {
int complement = target - nums[i];
if (numMap.count(complement)) {
return {numMap[complement], i};
}
numMap[nums[i]] = i;
}
return {}; // No solution found
}
};