Вот формулировка проблемы:
У вас есть лампочка на интервале N секунд, где дается N.В момент времени 0 лампочка включается, а в момент времени N она выключается независимо от каких-либо переключателей.Время от времени 1 до времени N-1 у вас есть максимум N-2 переключателей в виде массива, называемого переключателями, которые поворачивают лампочку в противоположность тому, что она есть на данный момент, т.е. если она включена, она выключится и наоборот,Например, предположим, что N = 8 и переключатели = [1,2].Лампочка включится во время 0, выключатель во время 1 выключит ее, выключатель во время 2 включит ее, и она будет оставаться до времени 8, когда она выключится.Следовательно, время, в течение которого оно остается, равно 1-0 + 8-2 = 7.
Теперь предположим, что вы должны вставить переключатель в этот интервал, где он еще не присутствует.Каково максимальное время, в течение которого лампочка остается включенной после включения переключателя.Например, в приведенном выше случае решение будет 6, поскольку при включении переключателя в момент времени 7 время, затрачиваемое лампочкой, будет максимальным.Так как 1-0 + 7-2 = 6, ответ - 6.
Я решил проблему, используя грубое решение, полагая, что если вы вставите переключатель в момент времени k, то состояниялампочки до того, как это не будет затронуто, и состояния лампочки от времени k до времени N будут обратными, и, следовательно, вы можете найти время, которое она проводит после времени k, по (N - k) - t, гдеt - это время, которое он провел бы от времени k до N без вставленного переключателя.Следовательно, я могу рассчитать время, которое лампочка будет тратить на каждую временную позицию вставленного переключателя, и максимизировать его.Однако, так как вычисление времени, которое тратит лампочка, является операцией O (n), и я перебираю все возможные позиции, мое решение - O (n ^ 2), и это привело к истечению времени ожидания моего кода для некоторых тестовых случаев.
Может кто-нибудь предложить лучшее решение?