使用C++的数组旋转反转算法


在这个问题中,我们得到一个数组,需要使用反转算法将数组旋转d个元素,例如:

Input : arr[] = [1, 2, 3, 4, 5, 6, 7], d = 2
Output : arr[] = [3, 4, 5, 6, 7, 1, 2]
Explanation : As you can see we have to rotate this array by d = 2 but our main task is to achieve this by using a reversal technique.

我们对使用反转技术旋转数组进行了一些计算,得出结论:

  • 首先,反转数组的前d个元素。
  • 其次,反转其余元素。
  • 第三,反转整个数组。

通过这三个步骤,我们可以得到旋转后的数组。

寻找解决方案的方法

在这个问题中,首先,我们将创建一个反转元素的函数;现在我们按照上面给出的步骤进行操作。

示例

#include <bits/stdc++.h>
using namespace std;

void reverseArray(int arr[], int start, int end) { // our reversal algorithm
   while (start < end) { // if start becomes equal to end we break the loop
      int temp = arr[start];
      arr[start] = arr[end];
      arr[end] = temp;
      start++;
      end--;
   }
   return ;
}
void Rotate(int arr[], int d, int n) { // rotation function
   if (d == 0) // no rotation required
      return;
   d = d % n; // when d becomes equal to n so our array comes to its original form
   reverseArray(arr, 0, d - 1); // reversing first d elements
   reverseArray(arr, d, n - 1); // reversing the remaining elements
   reverseArray(arr, 0, n - 1); // reversing the whole array

   return ;
}
int main() {
   int arr[] = { 1, 2, 3, 4, 5, 6, 7 }; // given array
   int n = sizeof(arr) / sizeof(arr[0]); // size of our array
   int d = 2;
   Rotate(arr, d, n);
   for(int i = 0; i < n; i++) // printing the array
      cout << arr[i] << " ";
   cout << "\n";
   return 0;
}

输出

3 4 5 6 7 1 2

上述代码的解释

在上述方法中,我们首先创建反转技术,它将采用三个参数,即数组、起始索引和结束索引,并从开始到结束反转我们的数组。正如我们之前开发的算法一样,我们将使用此函数应用该算法。我们首先反转前d个元素。现在其次,我们反转其余元素,最后,我们反转整个数组。结果,我们的数组旋转了d个位置。在rotate函数中,我们令d = d % n。这是因为如果我们旋转数组的前n个元素,得到的结果与之前相同,所以我们对d取模n。

结论

在本文中,我们解决了一个问题,即应用反转算法进行数组旋转。我们还学习了这个问题的C++程序以及我们解决这个问题的完整方法(普通方法)。我们可以在其他语言(如C、Java、Python和其他语言)中编写相同的程序。希望本文对您有所帮助。

更新于:2021年11月29日

浏览量:194

开启您的职业生涯

完成课程获得认证

开始学习
广告