是2021.1.8的每日一题,不过拖到了今天才来完成。
一开始很直接的思路就是利用python处理数组的拼接,比较轻松的就写出来了,用时28ms,内存15mb。
class Solution:
def rotate(self, nums: List[int], k: int) -> None:
"""
Do not return anything, modify nums in-place instead.
"""
l = len(nums)
k %= l
nums[ : ] = nums[-k : ] + nums[ : -k]
官方要求满足in-place with O(1) extra space且拥有三种做法,所以又使用了三次旋转的思路,即整体翻转,前k翻转,后k翻转的做法。用时44ms,内存15.1mb。
class Solution:
def rotate(self, nums: List[int], k: int) -> None:
"""
Do not return anything, modify nums in-place instead.
"""
def swap(l, r):
while l < r:
nums[l], nums[r] = nums[r], nums[l]
l += 1
r -= 1
n = len(nums)
swap(0, n - 1)
swap(0, n - k - 2)
swap(n - k - 1, n - 1)
最后查了题解用了栈的思想, pop和insert。用时136ms,内存14.9mb。大草时间略长
class Solution:
def rotate(self, nums: List[int], k: int) -> None:
"""
Do not return anything, modify nums in-place instead.
"""
n = len(nums)
for i in range(k % n) :
nums.insert(0, nums[-1])
nums.pop()
又看了一下题解发现可以写的简便一点虽然也不是很必要。
nums.insert(0, nums.pop())
P189,完。