在 C++ 中使用 deque 对数组进行循环旋转
给定一个整数数组arr[]和另一个整数D ,任务是对数组执行D循环旋转并打印修改后的数组。
例子:
Input: Arr[] = {1, 2, 3, 4, 5, 6}, D = 2
Output: 5 6 1 2 3 4
Input: Arr[] = {1, 2, 3}, D = 2
Output: 2 3 1
方法:
使用 C++ 中的 Deque,可以执行旋转,从 deque 中删除最后一个元素并将其插入到同一个 deque 的开头。
同样,可以执行所有需要的旋转,然后打印修改后的双端队列的内容,以获得所需的旋转数组。
如果旋转次数大于双端队列的大小,则只需使用带有N的 mod,因此, D = D%N 。
其中D是旋转次数,N 是双端队列的大小。
下面是上述方法的实现:
// C++ implementation of the approach
#include
using namespace std;
// Function to circular rotate
// the array by d elements
void rotate(deque deq,
int d, int n)
{
// Push first d elements
// from last to the beginning
for (int i = 0; i < d; i++) {
int val = deq.back();
deq.pop_back();
deq.push_front(val);
}
// Print the rotated array
for (int i = 0; i < n; i++) {
cout << deq[i] << " ";
}
cout << endl;
}
// Driver code
int main()
{
deque v = { 1, 2, 3, 4, 5, 6, 7 };
int n = v.size();
int d = 5;
rotate(v, d % n, n);
}
输出:
3 4 5 6 7 1 2