题目:给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。
说明:要求用空间复杂度为O(1)的原地算法
我的想法,先延长数组,再切断……
但提交以后突然发现,这也不是O(1)的 空间复杂度
class Solution:
def rotate(self, nums: List[int], k: int) -> None:
"""
Do not return anything, modify nums in-place instead.
"""
n = len(nums)
if n > 1:
k = k % n
for i in range(n - k):
nums.append(nums[i])
del nums[0:n-k]
贴一下题解的几种方法:
① 从头到尾循环,用temp记录被替换的值,为了保证环的情况能解决,加入一个count和begin点,count控制一共替换N次,begin记录环的情况。
② 先整个数组反转,然后前k个反转,后n-k个反转。
两种方法实现起来都不是很难。