写一个程序,将一个有N个元素的数组,
循环移动K位,
要求时间复杂度为o(n),空间复杂度度为o(1)!!
答:
#include <iostream>
using namespace std;
void main()
{
int k;
cin >> k; //输入移动距离
const int n = 5;
int a[n] = {1, 2, 3, 4, 5};
int temp[n]; //存储移动后的
for (int i = 0; i < n; ++i)
temp [(i + k) % n] = a[i];
for (int i = 0; i < n; ++i)
cout << temp[i] << ' ';
cout << endl;
}
############################################
############################################
#include <iostream>
using namespace std;
template<typename T>
void reverse(T *a, int l, int h)
{
T t;
int i;
for (i = 0; i < (h - l + 1) / 2; ++i)
{
t = a[l + i];
a[l + i] = a[h - i];
a[h - i] = t;
}
}
int main(void)
{
int i;
char ca[] = "abcdefg";
int n = strlen(ca);
int k = 3;
reverse(ca, 0, n - 1);
reverse(ca, 0, k );
reverse(ca, k + 1, n - 1);
cout << ca << endl;
int ia[] = {1,2,3,4,5,6,7,8};
n = sizeof(ia) / sizeof(ia[0]);
k = 4;
reverse(ia, 0, n - 1);
reverse(ia, 0, k );
reverse(ia, k + 1, n - 1);
for (i = 0; i < n; ++i)
{
cout << ia[i] << ' ';
}
cout << endl;
return 0;
}