Допустим, у нас есть функция с именем arr_reverse(arr,i,j)
, которая переворачивает элементы массива arr
между индексами i
и j
, используя функцию swap
.
Пример:
arr = {1,2,3,4,5}
i = 0
j = 2
тогда функция вернется:
{3,2,1,4,5}
^^^^^
Реализация этой функции проста и является O(N)
.
Теперь давайте использовать эту функцию при вращении массива.
arr = {1,2,3,4,5} // input array
k = 2 // amount of right rotation
result = {4,5,1,2,3} // expected result
l = 5 // length of array.
Step 1: Call arr_reverse(arr,l-k,l-1) which is arr_reverse(arr,3,4)
we get {1,2,3,5,4}
^^^
Step 2: Call arr_reverse(arr,0,l-k-1) which is arr_reverse(arr,0,2)
we get {3,2,1,5,4}
^^^^^
Step 3: Call arr_reverse(arr,0,l-1) which is arr_reverse(arr,0,4)
we get {4,5,1,2,3}
^^^^^^^^^
Весь процесс использует arr_reverse
3 раза, делая его O(N)