暴力解法
时间复杂度O(n),空间复杂度O(n)
#include <stdio.h>
#include <stdlib.h>
void converse(int a[],int len, int n) {
int* p = new int[n]();
for (int i = 0; i < n; i++) {
p[i] = a[i];
}
for (int i = 0; i < len - n; i++) {
a[i] = a[n + i];
}
for (int i = 0; i < n; i++) {
a[len - n + i] = p[i];
}
for (int i = 0; i < len; i++) {
printf("%d ", a[i]);
}
}
int main() {
int n;
scanf_s("%d", &n);
int a[10] = { 0,1,2,3,4,5,6,7,8,9 };
converse(a, 10, n);
return 0;
}
答案标准解法
时间复杂度O(n),空间复杂度O(1)
#include <stdio.h>
#include <stdlib.h>
void reverse(int a[], int from, int to) {
int temp;
for (int i = 0; i < (to-from+1)/2; i++) {
temp = a[i + from];
a[i+from] = a[to-i];
a[to - i] = temp;
}
}
void converse(int a[], int len, int n) {
reverse(a, 0, n-1);
reverse(a, n, len-1);
reverse(a, 0, len-1);
for (int i = 0; i < len; i++) {
printf("%d ", a[i]);
}
}
int main() {
int n;
scanf_s("%d", &n);
int a[10] = { 0,1,2,3,4,5,6,7,8,9 };
converse(a, 10, n);
return 0;
}