Повернуть массив - используя другой массив - PullRequest
0 голосов
/ 10 февраля 2020

Я пытаюсь решить проблему 189 на leetcode

Вопрос:

Для данного массива поверните массив вправо на k шагов где k неотрицательно.

В соответствии с решением, я попытался реализовать идею, изложенную в подходе 2: с помощью «дополнительного» массива. Тем не менее, я не могу получить желаемый результат. В чем проблема с этим кодом?

Я тоже пробовал использовать метод грубой силы, но он там не принят, поэтому пробую это !! Буду признателен за любую помощь!

i = 0
l = len(nums)
arr = [0]*l

while i < len(nums):
    split = l-k
    if i >=0 and i < split:
        arr[i+k] = nums[i]
    if i >= k+1 and i < l:
        arr[i-k-1] = nums[i]

    i+=1

nums = [0]*l

for a in range(0,l):
    nums[a] = arr[a]

print(arr)
print(nums)        

Получив некоторую помощь, я попробовал использовать подход среза (как предложено в комментариях), и вот код, который я мог бы придумать:

l = len(nums)

a = nums[:l-k] # appending part
nums = nums[l-k:] # real array

for i in a:
    nums.append(i)


print(nums)

Тем не менее, это не работает на этом сайте. Я получаю правильный выходной массив, но не совсем то, что требуется.

1 Ответ

1 голос
/ 10 февраля 2020

Проверьте ниже. Я предложил нужную коррекцию.

from typing import List

def rotate(nums: List[int], k: int) -> None:
    l = len(nums)

    a = nums[:l-k] # appending part
    # nums = nums[l-k:] # real array # -> How you have written
    nums[:] = nums[l-k:] # real array # -> How it should be


    for i in a:
        nums.append(i)


    # print(nums) # Not needed


nums = [1,2,3,4,5]

rotate(nums, 3)

print(nums)

Проблема с вашим кодом состоит в том, что задача ожидает от вас изменения списка, который передается в функцию. Однако, когда вы назначите его как nums = nums[l-k:], это будет видно только внутри функции. Вот почему, когда вы распечатали его, вы увидели ожидаемый результат. Но это назначение не изменит список, указанный в этой переменной. Вместо этого вы должны выполнить присвоение, подобное nums[:] = nums[l-k:], чтобы изменить список, который находится в глобальной области видимости.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...