使用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

開啟您的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.