Sobes.tech
Senior

Aufgabenbedingung: Gegeben ist ein Array von Ganzzahlen nums und eine Ganzzahl target. Es ist erforderlich, zwei Zahlen im Array zu finden, deren Summe target ergibt, und ihre Indizes zurückzugeben. Es wird garantiert, dass genau eine Lösung existiert, und dass das gleiche Element nicht zweimal verwendet werden kann. Beispiele: Eingabe: nums = [2,7,11,15], target = 9 Ausgabe: [0,1]. Erklärung: nums[0] + nums[1] = 2 + 7 = 9 Eingabe: nums = [3,2,4], target = 6 Ausgabe: [1,2]. Erklärung: nums[1] + nums[2] = 2 + 4 = 6 Eingabe: nums = [3,3], target = 6 Ausgabe: [0,1]. Erklärung: nums[0] + nums[1] = 3 + 3 = 6

sobes.tech KI

Antwort von 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) по памяти, что эффективно для данной задачи.