设计一个算法,将含有n个元素的整数数组A[0…n-1]的元素循环右移1≤m<n)位。要求算法的空间复杂度为O(1)
时间: 2024-04-29 21:23:55 浏览: 109
C语言数组元素循环右移问题及解决方法
5星 · 资源好评率100%
1. 将数组A分成两部分,A[0…n-m-1]和A[n-m…n-1];
2. 将A[0…n-m-1]逆序排列,得到B[0…n-m-1];
3. 将A[n-m…n-1]逆序排列,得到C[0…m-1];
4. 将B和C合并为新的数组D[0…n-1];
5. 将D逆序排列,得到A的循环右移m位后的新数组。
代码实现:
```
void reverse(int A[], int start, int end) {
while (start < end) {
int temp = A[start];
A[start] = A[end];
A[end] = temp;
start++;
end--;
}
}
void rotate(int A[], int n, int m) {
reverse(A, 0, n - m - 1);
reverse(A, n - m, n - 1);
reverse(A, 0, n - 1);
}
```
阅读全文