Задать вопрос
  • Как "выпрямить" кольцевой буфер c ограниченной доп.памятью?

    @apevzner
    Это то же самое, что поменять местами две неравные "половинки" одного массива.

    1) Реверсируем каждую из половинок (т.е., первый элемент станет последним, второй - предпоследним и т.д. Это тривиальный алгоритм, который я оставляю пытливому читателю:

    {5, 6, 7}, {1, 2, 3, 4)
    |
    {7, 6, 5}, {4, 3, 2, 1}

    2) Реверсируем массив целиком:
    {1, 2, 3, 4},{5, 6, 7}

    Время - O(N), доп. памяти надо - 1 штука (а можно и без нее, если элементами являются числа).

    В принципе, это классический, хорошо известный алгоритм.
    Ответ написан
    Комментировать