- 轮转数组
class No_0189_loop_k:
"""
题干:
https://leetcode.cn/problems/rotate-array/
循环位移数组k位
解析:
题目简单,关键是效率。python切片的翻转操作只是修改索引?, 没有赋值,效率比较高
另外记住这个算法:整体翻转 + 局部翻转
[1, 2, 3, 4, 5]
[5, 4 | 3, 2, 1]
[4, 5 | 1, 2, 3]
"""
@staticmethod
def rotate(nums, k):
k %= len(nums)
nums[:k], nums[k:] = nums[-k:], nums[:-k]
@staticmethod
def rotate_2(nums: list, k):
k %= len(nums)
nums.reverse()
nums[:k] = nums[:k:-1]
nums[k:] = nums[k::-1]
@staticmethod
def rotate_3(nums: list, k):
def _reverse(left, right):
"""
自己写翻转函数,和切片的效率做个对比
"""
nonlocal nums
while left < right:
nums[left], nums[right] = nums[right], nums[left]
left += 1
right -= 1
n = len(nums)
k %= n
_reverse(0, n-1)
_reverse(0, k-1)
_reverse(k, n-1)