旋转数组 - 通过使用另一个数组
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:]
那样进行赋值,以修改全局范围内的列表。
我正在尝试解决问题 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:]
那样进行赋值,以修改全局范围内的列表。