思路:
這個題題意表達得可能沒那麼清楚,如果說要求只能開O(N)的數組,時間複雜度也是O(N),那就是一個比較有趣的題。
我們可以用三次反轉的方法來思考這個題。
如果說我要把xy這個字符串的y字串移到x子串的左邊,變成yx,我記x^T爲將x反轉,如果x=”abc”,那麼x^T=”cba”。
這樣,這裏就有一個比較有意思的式子了
yx=(x^T y^T)^T
也就是說我們只需要進行三次反轉,就可以實現我的操作。時間複雜度爲6N,即O(N)
代碼:
#include<iostream>
using namespace std;
int num[100];
int n, m;
void reverse(int left, int right);
void reverse(int left, int right)
{
int i, t;
for (i = left; i <= (left + right) / 2; i++)
{
t = num[i];
num[i] = num[left + right - i];
num[left + right - i] = t;
}
}
int main()
{
int count = 0, pos = 0;
int i, j, t;
cin >> n >> m;
m = m%n;
for (i = 0; i < n; i++)
cin >> num[i];
reverse(0, n - m - 1);
reverse(n - m, n - 1);
reverse(0, n - 1);
for (i = 0; i < n - 1; i++)
cout << num[i] << " ";
cout << num[n - 1];
//while (1)
//{
//}
return 0;
}