我最近一直在解决各种编程任务。我发现的一个很容易 - 阵列循环旋转。我选择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元素,因为它可能已被移动。