三次反轉
對于[1,2,3,4,5,6,7][1,2,3,4,5,6,7]笑诅,
根據(jù)k=k%nk=k%n裹驰,將數(shù)組分為兩段:
第一段雀扶,對應數(shù)組下標范圍[0,n-k-1][0,n?k?1]段蚁孔,即[1,2,3,4][1,2,3,4]
第二段屑埋,對應數(shù)組下標范圍[n-k,n-1][n?k,n?1]豪筝,即[5,6,7][5,6,7]
分為三步:
- 反轉第一段,[4,3,2,1,5,6,7]
- 反轉第二段摘能,[4,3,2,1,7,6,5]
- 反轉整體续崖,[5,6,7,1,2,3,4]
code:
class Solution:
def rotate(self, nums: List[int], k: int) -> None:
"""
Do not return anything, modify nums in-place instead.
"""
n = len(nums)
k = k%n
def swap(l,r):
while l < r:
nums[l],nums[r] = nums[r],nums[l]
l += 1
r -= 1
swap(0,n-k-1)
swap(n-k,n-1)
swap(0,n-1)
# insert
class Solution:
def rotate(self, nums: List[int], k: int) -> None:
n = len(nums)
k %= n
for _ in range(k):
nums.insert(0, nums.pop())