2021-08-13 数组:移动篇
旋转数组
- 复制数组,找规律:不再给出代码
- 多轮循环移动:维护cnt表示访问过的数字,维护
class Solution:
def rotate(self, nums: List[int], k: int) -> None:
"""
Do not return anything, modify nums in-place instead.
"""
n = len(nums)
k %= n
if k == 0:return
start = 0
tmp = nums[start]
cnt = 0
while cnt < n:
nxt = (start + k) % n
while nxt != start:
nums[nxt], tmp = tmp, nums[nxt]
nxt = (nxt+k) % n
cnt += 1
nums[nxt] = tmp
start += 1
tmp = nums[start]
cnt += 1
class Solution:
def rotate(self, nums: List[int], k: int) -> None:
if len(nums)>1:
k %= len(nums)
nums[0:k],nums[k:]=nums[len(nums)-k:],nums[0:len(nums)-k]
class Solution:
def rotate(self, nums: List[int], k: int) -> None:
k = k % len(nums)
nums[:] = nums[::-1]
nums[:k] = nums[:k][::-1]
nums[k:] = nums[k:][::-1]
移动零
- 两次遍历,填充数组:不再给出代码
- 类似冒泡的想法:找到0和非0位置(双指针),交换即可
class Solution:
def moveZeroes(self, nums: List[int]) -> None:
i = 0
j = 0
while j < len(nums):
if nums[j] != 0:
nums[i],nums[j] = nums[j],nums[i]
i+= 1
j += 1