例如数组大小n=7 int a[7]={1,2,3,4,5,6,7},旋转k=3次 得到{5,6,7,1,2,3,4}
有一个暴力求解的方法 就是一次一次的改变这个数组中元素的位置 时间复杂度为O(n+k),空间复杂度为o(1)
还有一种是用空间换时间 直接新建一个数组进行输入
最后有一个算法时间复杂度为o(n) 空间复杂度为o(1)的比较简便的方法
就是前n-k个先进行翻转 4321567 ,然后后k个在进行翻转4321765 最后整体在进行一次翻转
5671234就得到了我们想要的结果
void aaa(int* a,int zuo,int you);
int main()
{
int n;
int* a;
cout << "输入数组大小:";
cin >> n;
a = new int[n];
for (int i = 0; i < n; i++)
{
cin >> a[i];
}
int k;
cout << "输出旋转的次数:" << endl;
cin >> k;
if (k > n)
k = k % n;
for (int i = 0; i < n; i++)
{
cout << a[i] << ",";
}
cout << endl;
aaa(a, 0, n - k - 1);
aaa(a, n - k, n - 1);
aaa(a, 0, n - 1);
for (int i = 0; i < n; i++)
{
cout << a[i] << ",";
}
delete a;
}
void aaa(int* a, int zuo, int you)
{
while (zuo < you)
{
int temp;
temp = a[zuo];
a[zuo] = a[you];
a[you] = temp;
zuo++;
you--;
}
}