189. Rotate Array
Given an integer array nums, rotate the array to the right by k steps, where k is non-negative
Example 1:
- Input:
nums = [1,2,3,4,5,6,7], k = 3 - Output:
[5,6,7,1,2,3,4] - Explanation: rotate
1steps to the right:[7,1,2,3,4,5,6]rotate2steps to the right:[6,7,1,2,3,4,5]rotate3steps to the right:[5,6,7,1,2,3,4]
Example 2:
- Input:
nums = [-1,-100,3,99], k = 2 - Output:
[3,99,-1,-100] - Explanation: rotate
1steps to the right:[99,-1,-100,3]rotate2steps to the right:[3,99,-1,-100]
Constraints:
1 <= nums.length <= 10^5-2^31 <= nums[i] <= 2^31 - 10 <= k <= 10^5- Try to come up with as many solutions as you can. There are at least three different ways to solve this problem.
- Could you do it in-place with O(1) extra space?
Solution
class Solution:
def rotate(self, nums: list[int], k: int) -> None:
N = len(nums) - 1
cut = k % len(nums)
def reverse(l, r):
while l <= r:
nums[l], nums[r] = nums[r], nums[l]
l += 1
r -= 1
reverse(0, N)
reverse(0, cut - 1)
reverse(cut, N)