/** * File: two_sum.dart * Created Time: 2023-2-11 * Author: Jefferson (JeffersonHuang77@gmail.com) */ import 'dart:collection'; /* Способ 1: полный перебор */ List twoSumBruteForce(List nums, int target) { int size = nums.length; // Два вложенных цикла, временная сложность O(n^2) for (var i = 0; i < size - 1; i++) { for (var j = i + 1; j < size; j++) { if (nums[i] + nums[j] == target) return [i, j]; } } return [0]; } /* Способ 2: вспомогательная хеш-таблица */ List twoSumHashTable(List nums, int target) { int size = nums.length; // Вспомогательная хеш-таблица, пространственная сложность O(n) Map dic = HashMap(); // Один цикл, временная сложность O(n) for (var i = 0; i < size; i++) { if (dic.containsKey(target - nums[i])) { return [dic[target - nums[i]]!, i]; } dic.putIfAbsent(nums[i], () => i); } return [0]; } /* Driver Code */ void main() { // ======= Test Case ======= List nums = [2, 7, 11, 15]; int target = 13; // ====== Основной код ====== // Метод 1 List res = twoSumBruteForce(nums, target); print('Результат метода 1 res = $res'); // Метод 2 res = twoSumHashTable(nums, target); print('Результат метода 2 res = $res'); }