Senior
Όρος του προβλήματος: Δίνεται ένας πίνακας ακέραιων αριθμών nums και ένας ακέραιος target. Πρέπει να βρούμε δύο αριθμούς στον πίνακα των οποίων το άθροισμα είναι ίσο με το target και να επιστρέψουμε τους δείκτες τους. Εγγυάται ότι υπάρχει ακριβώς μία λύση και ότι δεν μπορεί να χρησιμοποιηθεί το ίδιο στοιχείο δύο φορές. Παραδείγματα: Είσοδος: nums = [2,7,11,15], target = 9 Έξοδος: [0,1]. Επεξήγηση: nums[0] + nums[1] = 2 + 7 = 9 Είσοδος: nums = [3,2,4], target = 6 Έξοδος: [1,2]. Επεξήγηση: nums[1] + nums[2] = 2 + 4 = 6 Είσοδος: nums = [3,3], target = 6 Έξοδος: [0,1]. Επεξήγηση: nums[0] + nums[1] = 3 + 3 = 6
sobes.tech AI
Απάντηση από AI
Для решения задачи "два числа в массиве, сумма которых равна target" можно использовать хэш-таблицу (Map) для хранения уже просмотренных чисел и их индексов. Идея в том, чтобы при обходе массива для каждого элемента проверить, есть ли в Map число, равное target минус текущий элемент. Если есть — возвращаем индексы.
Пример на Java:
import java.util.HashMap;
import java.util.Map;
public class TwoSum {
public static int[] twoSum(int[] nums, int target) {
Map<Integer, Integer> map = new HashMap<>();
for (int i = 0; i < nums.length; i++) {
int complement = target - nums[i];
if (map.containsKey(complement)) {
return new int[] {map.get(complement), i};
}
map.put(nums[i], i);
}
throw new IllegalArgumentException("No two sum solution");
}
public static void main(String[] args) {
int[] nums = {2, 7, 11, 15};
int target = 9;
int[] result = twoSum(nums, target);
System.out.println("[" + result[0] + ", " + result[1] + "]");
}
}
Такой подход работает за O(n) по времени и O(n) по памяти, что эффективно для данной задачи.