1.首先逆置数组前m个元素;
2.逆置余下n-m个元素
3.逆置整个数组a
采用此算法仅需要很少的额外空间,在时间和空间上都很高效,而且代码很短。
#include <iostream>
using namespace std;
int a[100];
void reverse(int *a, int l, int r){
int temp;
for (int i = l; i <= (l + r) / 2; i++){
temp = a[i];
a[i] = a[l + r - i];
a[l + r - i] = temp;
}
}
int main(){
int n, m;
cin >> n >> m;
for (int i = 0; i < n; i++) cin>>a[i];
reverse(a, 0, n - m - 1);
reverse(a, n - m, n - 1);
reverse(a, 0, n - 1);
for (int i = 0; i < n; i++) cout << a[i] << (i - n + 1 ? " " : "\n");
return 0;
}