您的位置:首页 > 理论基础 > 数据结构算法

数据结构面试题总结8——数组:数组循环移位

2015-05-31 15:43 417 查看
问题描述:将一个含有n个元素的数组向右循环移动k位,要求时间复杂度是O(n),且只能使用两个额外的变量。

分析:不能使用额外的变量就把我们限制了,如果使用一个同样长度的数组,我们在O(n)时间复杂度下就变的非常简单了。

加上俩那个额外变量的条件后我们再分析:假设原数组为123456,右移两位为561234。我们把数组分成两部分1234和56,分别翻转,原数组变为432165,再次对整个数组翻转,为561234,就是我们要的结果。
void MyReverse(int *a ,int start, int end)
{
int temp = 0;
while (start < end)
{
temp = a[start];
a[start++] = a[end];
a[end--] = temp;
}
}

void MyShift(int *a, int n , int k)
{
k = k % n;
MyReverse(a,0,n-k-1);
MyReverse(a,n-k,n-1);
MyReverse(a,0,n-1);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: