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

配列がC++でソートおよびローテーションされているかどうかを確認します


整数の配列が与えられた場合、タスクは、配列がソートされ(昇順)、ある数の位置の後に回転されるかどうかを確認することです。

入力-1:

N = [7, 8, 9, 4, 5, 6]

出力:

True

説明: 指定された配列は昇順であり、3番目の位置以降の要素が回転しているため、この場合はTrueを返します。

入力-2:

N = [1, 5, 7, 6, 2, 3]

出力:

False

説明: 指定された配列は昇順でも特定の位置で回転されていないため、出力はFalseです。

この問題を解決するためのアプローチ

要素が昇順または並べ替えられていない配列があります。配列を並べ替えて回転する必要がある場合は、N [i]> N [i+1]のように少なくとも1つの要素があります。

したがって、すべてのN [i]について、条件を満たす要素が存在するかどうかをカウントし、それに応じてTrueまたはFalseを返します。

  • 配列要素を入力します。
  • ブール関数checkSortedandRotated(int * arr、int n)は、配列とそのサイズを入力として受け取り、配列が並べ替えられて回転される場合はtrueを返し、それ以外の場合はfalseを返します。
  • 配列全体を反復処理し、(arr [i]> arr [i + 1]%n)である要素の数を数えます。カウントが「1」の場合はTrueを返し、そうでない場合はFalseを返します。
  • 出力を返します。

#include <bits/stdc++.h>
using namespace std;
bool checkSortedandRotated(int * arr, int n) {
   int count = 0;
   for (int i = 0; i < n; i++) {
      if (arr[i] > arr[(i + 1) % n])
         count++;
   }
   return (count <= 1);
}
int main() {
   int arr[] = {5,6,7,1,2,3,4};
   int n = sizeof(arr) / sizeof(int);
   if (checkSortedandRotated(arr, n)) {
      cout << "True" << endl;
   } else {
      cout << "False" << endl;
   }
   return 0;
}

上記のコードを実行すると、次のように出力が生成されます

出力

True

指定された配列[5、6、7、1、2、3、4]は、3番目の位置から並べ替えられて回転されるため、この場合、出力は「True」として取得されます。


  1. 配列がPythonでソートおよびローテーションされているかどうかを確認するプログラム

    numsという配列があるとすると、配列が元々降順ではない順序で並べ替えられてから、いくつかの位置(ゼロの場合もある)を回転したかどうかを確認する必要があります。重複がアレイに存在する場合もあります。 したがって、入力がnums =[12,15,2,5,6,9]のようである場合、出力は2桁右に回転されるため、Trueになります。 これを解決するには、次の手順に従います- j:=0 j

  2. Pythonで配列が並べ替えられて回転されているかどうかを確認します

    n個の一意の値の配列があるとします。この配列がソートされ、反時計回りに回転しているかどうかを確認する必要があります。ここでは、少なくとも1回のローテーションが必要であるため、完全に並べ替えられた配列は、並べ替えられてローテーションされたとは見なされません。 したがって、入力がnums =[4,5,6,8,1,3]の場合、時計回りに2回回転できるため、出力はTrueになり、[1、3、3のように並べ替えられます。 4、5、6、8]。 これを解決するには、次の手順に従います- min_element:=最小数 min_index:=nums単位のmin_elementのインデックス be