ホームページ > バックエンド開発 > C++ > C++で書かれた配列の右回転のための反転アルゴリズム

C++で書かれた配列の右回転のための反転アルゴリズム

WBOY
リリース: 2023-09-08 20:17:02
転載
1050 人が閲覧しました

C++で書かれた配列の右回転のための反転アルゴリズム

この記事では、-

Input : arr[ ] = { 4, 6, 2, 6, 43, 7, 3, 7 }, k = 4
Output : { 43, 7, 3, 7, 4, 6, 2, 6 }
Explanation : Rotating each element of array by 4-element to the right gives { 43, 7, 3, 7, 4, 6, 2, 6 }.

Input : arr[ ] = { 8, 5, 8, 2, 1, 4, 9, 3 }, k = 3
Output : { 4, 9, 3, 8, 5, 8, 2, 1 }
ログイン後にコピー

のような指定された配列を k 個の要素だけ右に回転する逆転アルゴリズムについて学びます。解を見つける方法

この問題は、各要素を右に移動し、このプロセスを k 回繰り返すことで簡単に解決できます。ただし、時間計算量が O(k * N) であるため、これにはさらに時間がかかります。

反転アルゴリズム: 反転とは配列を反転することです。配列の回転は、特定の要素の範囲を反転することで実行できます。このアルゴリズムに従って -

  • まず、配列全体を反転します。
  • k は N より大きいため、k modulo k modulo N (配列サイズ) を変更します。
  • 配列の最初の k 個の要素を反転して順序どおりにします。
  • 次に、残りの要素の範囲を逆にします (つまり、k から N-1 まで)。
  • li>

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

void reverse(int nums[], int start,int end) {
   int temp=0;
   // reversing array with swapping start element with end element.
   while(start<=end){
      temp=nums[end];
      nums[end]=nums[start];
      nums[start]=temp;
      start++;
      end--;
   }
}

int main() {
   int arr[] = {4, 6, 2, 6, 43, 7, 3, 6, 2, 4, 5 };

   int N = sizeof(arr)/sizeof(arr[0]);

   int k = 4;
   // reversing whole array
   reverse(arr, 0, N-1);
   k = k%N;
   // reversing element range of 0 to k-1.

   reverse(arr, 0, k-1);
   // reversing element range of k to last element.
   reverse(arr, k, N-1);
   cout << "Array after rotating by k-elements : ";
   for(int i = 0;i<N;i++)
      cout << arr[i] << " ";
   return 0;
}
ログイン後にコピー

出力

Array after rotating by k-elements : 6 2 4 5 4 6 2 6 43 7 3
ログイン後にコピー

結論

この記事では、k による逆アルゴリズムの使用について説明しました。配列の要素を右回転します。反転アルゴリズムとは何か、そしてこの問題を解決するためにそれを実装する方法について説明しました。この問題を解決するための C コードについても説明しました。このコードは、C、Java、Python などの他の言語で書くことができます。この記事がお役に立てば幸いです。

以上がC++で書かれた配列の右回転のための反転アルゴリズムの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:tutorialspoint.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート