Можно без доппамяти с помощью двух указателей. Создаем указатель на первый и последний элементы, двигаем левый указатель максимально вправо при фиксированном правом пока сумма < x, потом можно сдвинуть правый и двигаться левым, начиная с позиции, на которой он стоит после предыдущего шага.
Есть также задача 3-SUM, в которой рассматривается сумма трех элементов. Так вот, открытая проблема (причем довльно безнадежная) решить ее за время O(n^k), где k < 2. Причем алгоритм, требующий O(n^2) времени, очень прост (советую подумать на ним).