旋转数组 - 通过使用另一个数组

Rotate array - by using another array

我正在尝试解决问题 189 on leetcode

问题是:

Given an array, rotate the array to the right by k steps, where k is non-negative.

根据解决方案,我尝试实现方法2中给出的想法:使用"extra"数组。尽管如此,我还是无法得到想要的结果。这段代码有什么问题?

我也试过蛮力方法,但那里不接受,所以试试这个!!如有任何帮助,我们将不胜感激!

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)

不过,这不是那个网站上的 运行。我得到了正确的输出数组,但不完全符合要求。

查看以下内容。我提出了所需的更正。

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:] 那样进行赋值,以修改全局范围内的列表。