使用分治算法,实现将数组A[n]中所有元素循环左移k个位置,要求时间复杂度为O(n),空间复杂度为O(1)。例如,对abcdefgh循环左移3位得到 defghabc 用c语言写出
时间: 2024-10-19 10:14:11 浏览: 39
数据结构算法题1
实现数组A[n]中所有元素循环左移k个位置,可以利用分治策略和位运算来达到线性时间和常量空间的要求。这里是一个简单的C语言示例:
```c
#include <stdio.h>
void circular_left_shift(int* A, int n, int k) {
// 判断溢出情况并更新k
k = (k % n + n) % n;
for (int i = 0; i < n; ++i) {
// 将A[i]左移k位,相当于取模n操作
A[(i + k) % n] = A[i];
}
}
int main() {
int A[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0};
int n = sizeof(A) / sizeof(A[0]);
int k = 3;
printf("Before shift: ");
for (int i = 0; i < n; ++i) {
printf("%d ", A[i]);
}
circular_left_shift(A, n, k);
printf("\nAfter shift: ");
for (int i = 0; i < n; ++i) {
printf("%d ", A[i]);
}
return 0;
}
```
这个程序首先检查`k`是否需要向右移动n的位置以避免溢出,然后通过一个for循环和位运算`(i + k) % n`实现了每个元素向左移动k位的效果。
阅读全文