.旋转数组,给一个数组,请实现将数组中的元素向右轮转 k 个位置,其中k是非负数
时间: 2024-02-03 20:11:27 浏览: 137
C语言-leetcode题解之第189题轮转数组.zip
可以使用三次翻转的方法来实现旋转数组。假设原始数组为 [1, 2, 3, 4, 5, 6, 7],k = 3,那么旋转后的数组应该为 [5, 6, 7, 1, 2, 3, 4]。
具体做法如下:
1. 首先将数组分为两部分,前一部分为 [1, 2, 3, 4],后一部分为 [5, 6, 7]。
2. 分别翻转这两部分,得到 [4, 3, 2, 1] 和 [7, 6, 5]。
3. 将整个数组翻转,得到 [5, 6, 7, 1, 2, 3, 4]。
代码实现如下:
```python
def rotate(nums, k):
n = len(nums)
k %= n # 处理 k 大于数组长度的情况
reverse(nums, 0, n - 1) # 翻转整个数组
reverse(nums, 0, k - 1) # 翻转前一部分
reverse(nums, k, n - 1) # 翻转后一部分
def reverse(nums, start, end):
while start < end:
nums[start], nums[end] = nums[end], nums[start]
start += 1
end -= 1
```
这样,我们就完成了旋转数组的操作。
阅读全文