C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

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要素を逆にします。
  • 次に、残りの要素を逆にします。
  • 3番目に、配列全体を逆にします。

そして、これらの3つのステップを適用することで、回転した配列を取得できます。

解決策を見つけるためのアプローチ

この問題では、まず、要素を反転する関数を作成します。ここで、上記の手順に従います

#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

上記のコードの説明

上記のアプローチでは、最初に反転手法を作成します。これは、配列、開始インデックス、終了インデックスの3つのパラメーターを取り、配列を最初から最後まで反転します。以前にアルゴリズムを開発したので、この関数を使用してそのアルゴリズムを適用します。まず、最初のd要素を逆にします。次に、残りの要素を反転し、最後に配列全体を反転します。その結果、配列はdだけ回転します。回転関数では、d =d%nにします。これは、配列の最初のn個の要素を回転させた場合、得られる答えは以前と同じになるためです。そのため、nを使用してdのmodを作成します。

結論

この記事では、問題を解決して、配列の回転に反転アルゴリズムを適用します。また、この問題のC ++プログラムと、この問題を解決するための完全なアプローチ(Normal)についても学びました。同じプログラムを、C、java、python、その他の言語などの他の言語で作成できます。この記事がお役に立てば幸いです。


  1. アレイローテーション用プログラムのCプログラム?

    配列をn位置左に回転するCプログラムを作成します。 Cプログラミングで配列をn回左に回転させる方法。 Cプログラムで配列をn桁左に回転させるロジック。 Input: arr[]=1 2 3 4 5 6 7 8 9 10 N=3 Output: 4 5 6 7 8 9 10 1 2 3 説明 配列内の要素を読み取り、arrと言います。 Nなどの変数で回転する回数を読み取ります。 左指定された配列を1ずつN回回転させます。実際の左回転とは、配列要素を1つ左にシフトし、最初の要素を最後にコピーすることです。 例 #include <iostream> usin

  2. 配列ローテーション用のPythonプログラム

    この記事では、以下に示す問題ステートメントの解決策について学習します。 問題の説明 −テキストとパターンが与えられた場合、パターンのすべての出現とその順列(またはアナグラム)をテキストで印刷する必要があります。 次に、以下の実装のソリューションを見てみましょう- 例 # maximum value MAX = 300 # compare def compare(arr1, arr2):    for i in range(MAX):       if arr1[i] != arr2[i]:       &nbs