给你一个数组,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。怎么样才能使时间复杂度和空间复杂度都为O(n),用C语言给出具体代码
时间: 2023-02-17 08:41:21 浏览: 95
对2n长度的数组实现时间复杂度为n的对应位置数据调整
轮转数组的一种常见方法是使用反转。
具体来说,你可以这样做:
1. 反转整个数组:[3,2,1] -> [1,2,3]
2. 反转前 k 个元素:[1,2,3] -> [2,1,3]
3. 反转后 n-k 个元素:[2,1,3] -> [2,3,1]
这样就可以将数组中的元素向右轮转 k 个位置了。
下面是 C 语言代码示例:
```
void rotate(int nums[], int n, int k) {
// 将 k 取模,以防超出数组范围
k = k % n;
// 反转整个数组
reverse(nums, nums + n);
// 反转前 k 个元素
reverse(nums, nums + k);
// 反转后 n-k 个元素
reverse(nums + k, nums + n);
}
```
这段代码的时间复杂度和空间复杂度都是 O(n)。
阅读全文