Чтобы ответить на ваш второй вопрос первым, да, код - O(n^2)
, поскольку сложность find
равна O(n)
.
У вас есть варианты, чтобы улучшить его.Если диапазон чисел невелик, вы можете просто установить достаточно большой массив и счетчик приращений при переборе исходных данных.Если диапазон больше, но редок, вы можете использовать хеш-таблицу для подсчета.Обе эти опции имеют линейную сложность.
В противном случае я бы сделал одну итерацию, чтобы взять значение abs каждого элемента, затем отсортировать их, а затем вы можете выполнить агрегацию за один дополнительный проход.Сложность здесь n log(n)
для сортировки.Другие проходы не имеют значения для сложности.