Я проанализировал ваши наблюдения и относительно того, что, кажется, удовлетворяет требованию:
Вставьте элементы в хеш-таблицу за один проход.Затем сделайте 2-й проход, ища T - a [i] в хеш-таблице.Сложность пространства составляет O (n) для хэш-таблицы и O (n) для 2 проходов.Это решение соответствует требованию времени, указанному в вопросе.
Я считаю, что этот подход не соответствует требованиям, поскольку теоретически сложность вставки hashtable
для наихудшего случая равна O (n).
Поскольку вы сказали, что изучали сортировку по Radix, я думаю, что это путь, вы можете отсортировать массив в соответствии с требованиями времени, а затем вы можете использовать технику Two Pointers
, чтобы проверить, есть ли сумма T
:
int left = 0, right = array_size - 1;
boolean found = false;
while (left < right) {
if (a[left] + a[right] == T) {
found = true;
}
else if (a[left] + a[right] < T) {
left++;
}
else {
right--;
}
}