Я рекомендую внимательно взглянуть на определение сложности времени
Я сделал его довольно коротким, используя только одну форму -1 oop.
Хотя это единица для l oop, если массив содержит n
элементов (или n дней), и нам нужно вычислить дни уведомлений о мошенничестве после первого d
дней, нам нужно ввести для l oop n-d+1
раз.
И каждый раз, когда мы вводим для l oop, мы сначала копируем подмассив длины d
, а затем выполняем сортировку по нему
копирование: O(d)
по сложности времени
сортировка (при условии быстрой сортировки в среднем случае): O(d * log(d))
по временной сложности.
Таким образом, общая временная сложность для этого алгоритма составляет O(n * d * log(d))
, если мы пренебрегаем меньшими членами.
Подсказки по использованию очереди предназначены для того, чтобы мы рассмотрели проблему в целом и попытались найти шаблоны. В этом случае он называется шаблоном скользящего окна .
Идея sliding window
разумна: когда мы обрабатываем [20, 30, 40]
, мы можем использовать информацию, сгенерированную при обработке [10, 20, 30]
, вместо того, чтобы делать все заново.
Например, за исключением элементов 10
и 40
, остальные элементы в двух шагах абсолютно одинаковы.
При наличии очереди первый элемент может представлять 10
, а когда мы приступаем к процессу следующего раунда, мы просто убираем этот первый элемент и добавляем новый элемент.
Для нахождения медианы бега я предлагаю посмотреть шаблон с двумя кучами