使用单个数组

时间:2017-01-19 04:37:16

标签: c++ arrays algorithm

我最近一直在解决各种编程任务。我发现的一个很容易 - 阵列循环旋转。我选择C ++作为一种语言,我想保留它。

想法是将每个数组元素向右旋转给定数量的位置:例如旋转3次[3,8,9,7,6]给出[9,7,6,3,8]。

使用额外阵列找出解决方案并不困难。唯一需要考虑的是计算新职位:

(old_position + rotations)%array_size

然而,我已经开始思考如何只用一个数组来实现它(如果)?我最初的想法是在新旧位置之间交换两个元素(知道旧位置是什么)并对所有元素重复它。我的代码看起来像这样:

int temp_el;
int temp_index = 0;
int new_pos;
for(int i=0;i<A.size();i++)
{
    new_pos = (temp_index + rotations)%A.size();
    temp_el = A[new_pos];
    A[new_pos] = A[0];
    A[0] = temp_el;
    temp_index = new_pos;
}

但是我忘记了0中旋转元素的中间或开头的情况是正确的。接下来我需要选择哪个元素?我不能只接受ith元素,因为它可能已被移动。

0 个答案:

没有答案