力扣热门100题之轮转数组【中等】
发布人:shili8
发布时间:2025-03-11 04:42
阅读次数:0
**力扣热门100题之轮转数组**
**题目描述**
给定一个长度为 n 的整数数组 arr,请你将其旋转 k 次。每次旋转操作相当于将数组的第一个元素移动到数组的最后面。
例如,给定数组 [1,2,3,4,5,6,7] 和 k =3,我们可以得到以下结果:
[1,2,3,4,5,6,7]
[7,1,2,3,4,5,6]
[6,7,1,2,3,4,5]
**示例**
* 输入:arr = [1,2,3,4,5,6,7], k =3 输出:[7,1,2,3,4,5,6]
* 输入:arr = [1,2,3,4,5,6,7], k =9 输出:[7,1,2,3,4,5,6]
**解决方案**
我们可以使用以下方法来旋转数组:
1. **直接旋转**:将第一个元素移动到最后面,重复此过程 k 次。
2. **反转**:反转整个数组,然后反转前 k 个元素和后 n-k 个元素。
下面是实现上述方法的代码示例:
class Solution: def rotate(self, nums: List[int], k: int) -> None: """ Do not return anything, modify nums in-place instead. """ # 直接旋转 for _ in range(k): temp = nums.pop(0) nums.append(temp) # 反转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 # nums[:] = nums[n-k:] + nums[:n-k]
**注释**
* `nums.pop(0)`:移除并返回第一个元素。
* `nums.append(temp)`:将元素添加到数组末尾。
* `nums[:] = nums[n-k:] + nums[:n-k]`:反转前 k 个元素和后 n-k 个元素。
**时间复杂度**
* 直接旋转:O(nk)
* 反转:O(n)
**空间复杂度**
* 直接旋转:O(1)
* 反转:O(1)