Я пытаюсь повернуть массив arr
длиной n
на d
элементов. Я перевернул массив, а затем перевернул две части моего массива 0 to n-d
и n-d to n
, чтобы достичь результата.
from sys import stdin
def reverseArray(arr):
for i in range(len(arr)//2):
arr[i], arr[len(arr)-i-1] = arr[len(arr)-i-1], arr[i]
return
def rotate(arr, n, d):
reverseArray(arr)
reverseArray(arr[0:n-d])
reverseArray(arr[n-d:n])
return
# Taking Input Using fast I/O
def takeInput() :
n = int(stdin.readline().rstrip())
if n == 0:
return list(), 0
arr = list(map(int, stdin.readline().rstrip().split(" ")))
return arr, n
#to print the array/list
def printList(arr, n) :
for i in range(n) :
print(arr[i], end = " ")
print()
#main
t = int(stdin.readline().rstrip())
while t > 0 :
arr, n = takeInput()
d = int(stdin.readline().rstrip())
rotate(arr, n, d)
printList(arr, n)
t -= 1
Вход:
1 # Test cases
6 # n
1 3 6 11 12 17 # elements of arr
4 # d
Выход:
Мой результат
17 12 11 6 3 1
Ожидаемый результат
12 17 1 3 6 11
Я не понимаю, почему моя обратная функция работает для всего массива, а не для его частей. Поскольку списки изменяемы, я считаю, что моя функция должна изменять срезы.
Это работает, когда я назначаю срез переменной, а затем снова присваиваю срезу обратное значение.
def rotate(arr, n, d):
reverseArray(arr)
fp = arr[0:n-d]
sp = arr[n-d:n]
reverseArray(fp)
arr[0:n-d] = fp
reverseArray(sp)
arr[n-d:n] = sp
return