Поскольку для каждого числа num[i]
в позиции i
, вы можете использовать алгоритм 2-суммы в массиве [i+1...N]
, чтобы найти два числа так, чтобы их сумма равнялась -num[i]
, что означает сумму 3число равно 0.
Например,
Пусть массив будет [-1, 0, 1, 2, -1, -4]
Алгоритм найдет любые 2-суммы в [0, 1, 2, -1, -4]
, равные 1
Тогда он найдет любые 2-суммы в [1, 2, -1, -4]
, равные 0
и т. Д.
Теперь вы можете увидеть начальную точку подмассива:i+1
при поиске 2-суммы для num[i]
, поэтому int lo = index + 1
Поиск исчерпывающий, поэтому будут найдены все кортежи, сумма которых равна 0
.