轮转数组

🎯 问题描述(来源于LeetCode)

描述
给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。
要求
 

1
  Do not return anything, modify nums in-place instead

说明

  • 1 <= nums.length <= 105
  • -231 <= nums[i] <= 231 - 1
  • 0 <= k <= 105

示例

  • 示例 1:
    输入: nums = [1,2,3,4,5,6,7], k = 3
    输出: [5,6,7,1,2,3,4]
    解释:
    向右轮转 1 步: [7,1,2,3,4,5,6]
    向右轮转 2 步: [6,7,1,2,3,4,5]
    向右轮转 3 步: [5,6,7,1,2,3,4]

💻 解题思路

思路1:三次反转

思路1:代码实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Solution:
def rotate(self, nums: List[int], k: int) -> None:
"""
Do not return anything, modify nums in-place instead.
"""
l=len(nums)
def reverse(start:int,end:int)->None:
while start<end:
nums[start],nums[end]=nums[end],nums[start]
start+=1
end-=1
k%=l
reverse(0,l-1)
reverse(0,k-1)
reverse(k,l-1)

思路1:📊 性能分析

提交结果
  • 运行时间:7ms击败50.31%
  • 内存消耗:25.22MB击败37.81%
复杂度验证
  • 时间复杂度:O(n)O(n)
  • 空间复杂度:O(1)O(1)

思考

通过三次反转实现数组轮转