Task Livecoding Find Two Sum Sorted

3. Найти 2 элемента упорядоченного массива, сумма которых равна заданному числу #

Спойлеры к решению
Подсказки
  • Так как массив упорядоченный, можно использовать два указателя: один в начале, другой в конце.
  • Если сумма элементов больше целевого числа, уменьшаем правый указатель.
  • Если сумма меньше, увеличиваем левый указатель.
  • Если сумма совпала — нашли ответ.
  • Если указатели пересеклись — таких элементов нет.
  • Временная сложность: O(n), так как массив проходит максимум один раз.
Решение
public class TwoSumSorted {
    public static int[] findTwoSum(int[] nums, int target) {
        int left = 0, right = nums.length - 1;
        
        while (left < right) {
            int sum = nums[left] + nums[right];

            if (sum == target) {
                return new int[]{nums[left], nums[right]};
            } else if (sum < target) {
                left++;  // Увеличиваем левый индекс, чтобы увеличить сумму
            } else {
                right--; // Уменьшаем правый индекс, чтобы уменьшить сумму
            }
        }
        
        return new int[]{}; // Если ничего не нашли
    }

    public static void main(String[] args) {
        int[] nums = {1, 2, 3, 4, 5, 6, 7, 8, 9};
        int target = 10;
        int[] result = findTwoSum(nums, target);

        if (result.length > 0) {
            System.out.println("Найденные элементы: " + result[0] + " и " + result[1]);
        } else {
            System.out.println("Пара не найдена");
        }
    }
}

Пример работы:
Вход: {1, 2, 3, 4, 5, 6, 7, 8, 9}, target = 10
Выход: 1 и 9 (или 2 и 8, 3 и 7, 4 и 6 в зависимости от того, какую пару он найдет первой).