Перестройте массив, сдвинув средние элементы в начало и конец попеременно.
Для заданного массива задача состоит в том, чтобы поочередно сдвигать средний элемент в начало и конец массива, пока средний элемент не станет равным первому элементу исходного массива.
Input: arr[]=[2, 8, 5, 9, 10]
Output: [9, 5, 2, 10, 8]
Explanation: We can get this output by shifting middle element
step1: middle element 5 is shifted to front of array [5, 2, 8, 9, 10]
step2: middle element 8 is shifted to end of array [5, 2, 9, 10, 8]
step3: middle element 9 is shifted to front of array [9, 5, 2, 10, 8]
Input: arr[]=[10, 12, 6, 5, 3, 1]
Output: [1, 3, 5, 10, 6, 12]
Наивный подход: сдвиньте средний элемент массива поочередно к началу и концу массива.
Возьмите средний элемент и сдвиньте его в начало массива, если с четно, или сдвиньте его в конец массива, если с нечетно. Завершите цикл, когда средний элемент станет равным первому элементу исходного массива.
Ниже приведена реализация вышеуказанного подхода:
Временная сложность: O(n 2 )
Вспомогательное пространство: O(1)
Эффективный подход: альтернативное смещение также относится к половинному обращению массива. Сначала возьмите элемент от последнего до середины, если n четное, или возьмите элемент от последней секунды до середины и вставьте в новый массив br[], затем вставьте первый элемент в br[]. Затем вставьте элемент от середины 1 до индекса 1 и вставьте в br[]. Таким образом, он вернет массив в полуобратном порядке.
Алгоритм:
step1: Declare new array br and initialize pos as n-1.
step2: If n is even traverse from last index pos or if n is odd then traverse from second last index pos-1.
step3: Store element from pos index to mid index into br array.
step4: Then insert first element of array to br array.
step5: If n is odd then insert last value elementof array to br array.
step6: Store element from mid-1 index to index 1 into br array.
step7: return br array.
Ниже приведена реализация вышеуказанного алгоритма:
Временная сложность: O(n)
Космическая сложность: O(n)