旋转数组
我的代码
from typing import List
def rotate(nums: List[int], k: int) -> None:
"""
Do not return anything, modify nums in-place instead.
"""
i = 0
while i<k:
nums.insert(0,nums.pop())
i += 1
我的理解
直接用进出列表来解决这个问题,移动次数用循环控制。哈哈,这么快就做出来了。但我看到我的运行时间时,我懵了:188ms,这应该是我的算法运行时间最长的了。看来操作进出队列,真是费时间。
大佬的代码
def rotate(self, nums: List[int], k: int) -> None:
"""
Do not return anything, modify nums in-place instead.
"""
nums[:] = nums[len(nums) - k % len(nums):] + nums[:len(nums) - k % len(nums)]
我对大佬代码的理解:
太牛逼了,一行解决战斗!他直接将列表按照我们给的K值切断,然后重新组合,切断时利用取余,把多次循环按照列表长度以内的的长度处理(就是如果重复循环了,就按照最后一波的处理),然后把后面的添加到前边,前边的放到后边。nums是他利用的一个变量。后边的是我们之前传递过来的。
需要注意的是:列表的索引是从0开始的。nums[:] = ··· 这是克隆相同的列表。
索引 | data |
---|---|
0 | 1 |
1 | 2 |
2 | 3 |
3 | 4 |
4 | 5 |
5 | 6 |