# 题目解答

## 解法一：时间复杂度O(N * K)

#include <iostream>
#include <vector>

using namespace std;
void getShiftArray (int *pArray, int len, int K);
void printArray(int *pArray, int len);

int main()
{
int a[] = {1, 2, 3, 4, 5, 6, 7, 8};
int len = sizeof(a) / sizeof(int);
int K = 4;
getShiftArray(a, len, K);
printArray(a, len);
system("pause");
}

void getShiftArray (int *pArray, int len, int K)
{
int endTemp = 0;
while (K--)
{
endTemp = pArray[len - 1];           //保存数组最后一个元素
for (int n = len - 1; n >= 0; n--)
{
pArray[n] = pArray[n - 1];
}
pArray[0] = endTemp;
}
}

void printArray(int *pArray, int len)
{
for (int i = 0; i < len; i++)
{
cout << pArray[i] << " ";
}
cout << endl;
}


#include <iostream>
#include <vector>

using namespace std;
void getShiftArray (int *pArray, int len, int K);
void printArray(int *pArray, int len);

int main()
{
int a[] = {1, 2, 3, 4, 5, 6, 7, 8};
int len = sizeof(a) / sizeof(int);
int K = 12;
getShiftArray(a, len, K);
printArray(a, len);
system("pause");
}

void getShiftArray (int *pArray, int len, int K)
{
int endTemp = 0;

K = K % len;
while (K--)
{
endTemp = pArray[len - 1];           //保存数组最后一个元素
for (int n = len - 1; n >= 0; n--)
{
pArray[n] = pArray[n - 1];
}
pArray[0] = endTemp;
}
}

void printArray(int *pArray, int len)
{
for (int i = 0; i < len; i++)
{
cout << pArray[i] << " ";
}
cout << endl;
}


## 解法二：线性时间

#include <iostream>
#include <vector>

using namespace std;
void getShiftArray (int *pArray, int len, int K);
void printArray(int *pArray, int len);
void reverseArray(int *pArray, int start, int end);

int main()
{
int a[] = {1, 2, 3, 4, 5, 6, 7, 8};
int len = sizeof(a) / sizeof(int);
int K = 12;
getShiftArray(a, len, K);
printArray(a, len);
system("pause");
}

void getShiftArray (int *pArray, int len, int K)
{

K = K % len;
//前半部分逆序
reverseArray(pArray, 0, len - K - 1);
//后半部分逆序
reverseArray(pArray, len - K, len - 1);
//整个序列逆序
reverseArray(pArray, 0, len - 1);
}

void reverseArray(int *pArray, int start, int end)
{
for (; start < end; start++, end--)
swap(pArray[start], pArray[end]);
}

void printArray(int *pArray, int len)
{
for (int i = 0; i < len; i++)
{
cout << pArray[i] << " ";
}
cout << endl;
}


举报原因： 您举报文章：编程之美6：数组循环移位 色情 政治 抄袭 广告 招聘 骂人 其他 (最多只允许输入30个字)