Решение достаточно простое, но я не могу придумать ничего большего, чтобы его оптимизировать. Я имею в виду, возможно ли это сделать при O(nlogn) или даже O(n)?
Я даже пробовал LINQ на C#. Тем не менее время превышено. Таким образом, это должно быть O(n²), которое проверяется, поскольку дает правильный ответ.
Код: Выделить всё
int count = arr
.SelectMany(n => arr,(a,b) => new {a,b})
.Where(pair => pair.a - pair.b == 2)
.Count();
Было бы неплохо объяснить другой алгоритм, желательно тот, который намного быстрее моего. Если вы хотите показать это в коде, используйте C#, но я могу читать только C/C++
Подробнее здесь: https://stackoverflow.com/questions/788 ... c-sharp-co