Найти самый длинный подсписок с данным средним в отсортированном двусвязном списке в O (n) - PullRequest
1 голос
/ 27 мая 2019

Учитывая число и отсортированный двусвязный список (с данными в виде целых чисел), я должен найти самый длинный подсписок, среднее значение которого является заданным числом в O (n).Как бы вы пошли об этом?

1 Ответ

1 голос
/ 28 мая 2019

Сначала вы найдете кумулятивные суммы всех индексов. Скажи, что это массив, cumsum[1..n]

Теперь начните с двух указателей, один из которых указывает на первый узел, а второй - на последний. Вычислите среднее значение этого диапазона как (cumsum[last]-cumsum[first])/(last-first+1). Если это больше, чем целевое среднее значение (скажем, k), то переместите указатель назад внутрь, так как это всегда будет уменьшать среднее значение (поскольку оно сортируется). Аналогично, если avg < k, передвиньте передний указатель вперед. Таким образом, вы либо получите диапазон со средним значением k, если он существует, либо поймете, что такого значения k не существует, если передние и задние указатели пересекаются. Поскольку мы перемещаем хотя бы один из указателей на каждом шаге, это O (n).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...