配列が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」として取得されます。
-
配列がPythonでソートおよびローテーションされているかどうかを確認するプログラム
numsという配列があるとすると、配列が元々降順ではない順序で並べ替えられてから、いくつかの位置(ゼロの場合もある)を回転したかどうかを確認する必要があります。重複がアレイに存在する場合もあります。 したがって、入力がnums =[12,15,2,5,6,9]のようである場合、出力は2桁右に回転されるため、Trueになります。 これを解決するには、次の手順に従います- j:=0 j
-
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