当前位置:实例文章 » 其他实例» [文章]力扣热门100题之轮转数组【中等】

力扣热门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)

其他信息

其他资源

Top