0 结果
1 题目
2 思路
倒置数组,将数组从头到尾逆置一遍,再从1到p和p+1到n再分别逆置。
3 实现
#include <cstdio>
#include <cstdlib>
const int n = 6;//数组大小
void Reverse(int* &L, int l, int r){//倒置数组
for(int i = 0;i < (r - l + 1)/2; i++){
int temp = *(L + (l - 1) + i);
*(L + (l - 1) + i) = *(L + (r - 1) - i);
*(L + (r - 1) - i) = temp;
}
}
void Func(int* &L, int p, int n){//三次倒置
Reverse(L, 1, n);
Reverse(L, 1, p);
Reverse(L, p + 1, n);
}
int main(){
int* R;
R = (int*)malloc(sizeof(int) * n);
for (int i = 0; i < n; ++i) {
*(R + i) = i + 1;
}
int p = 2;
Func(R, p, n);
for (int i = 0; i < 6; ++i) {
printf("%d ", *(R + i));
}
return 0;
}
时间复杂度:O(n)
空间复杂度:O(1)