标签:补充 lis instead com bcd 解法 扩展 次数 fresh
给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。
示例 1:
输入:[1,2,3,4,5,6,7]
和 k = 3 输出:[5,6,7,1,2,3,4]
class Solution: def rotate(self, nums: List[int], k: int) -> None: """ Do not return anything, modify nums in-place instead. """ # 给定的K为非负数,可能超出数组长度,先计算出实际旋转次数k n = len(nums) k %= n # 定义反转函数 def switch(a, b): while (a<b): # 从两头往中间交换 nums[a], nums[b] = nums[b], nums[a] a += 1 b -= 1 # 三次反转 switch(0, n-k-1) # 反转前k个元素 switch(n-k, n-1) # 反转后k个元素 switch(0, n-1) # 反转整体
# 当然利用python的切片特性我们可以更简洁的实现反转 class Solution: def rotate(self, nums: List[int], k: int) -> None: """ Do not return anything, modify nums in-place instead. """ k %= len(nums) nums[:] = nums[:][::-1] nums[:k] = nums[:k][::-1] nums[k:] = nums[k:][::-1]
class Solution: def rotate(self, nums: List[int], k: int) -> None: """ Do not return anything, modify nums in-place instead. """ k %= len(nums) nums[:] = nums[k:] + nums[:k]
标签:补充 lis instead com bcd 解法 扩展 次数 fresh
原文地址:https://www.cnblogs.com/Aquish/p/12642787.html