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

C++でソートするために個別にソートできるパーティションの最大数


要素が0からN-1の範囲にあるN個の数値の配列が与えられます。要素はソートされていません。目標は、個別に並べ替えることができ、次に連結して長さNの並べ替えられた配列全体を作成できる配列のパーティションの最大数を見つけることです。

各パーティションは、その中の要素がソートされないように選択されます。 0からN-1の範囲のN個の数値の場合、ソートされた要素のインデックスは値と等しくなります。 Arr [i]=i。

これを解決するには、各要素をその左側でこれまでに見つかった最大値で比較します。最大値の正しい位置に到達すると、(最大値==i)。左側のすべての要素が少ないため、個別のパーティションを作成できます。その右側のすべてが大きいです。次に、残りの適切な要素に対して同じ手順を実行し、それらをパーティションに分割します。

例を挙げて理解しましょう。

入力 − arr [] ={0,3,2,1,4,5}

出力 −パーティションの最大数− 3

説明 − 0から始めて、max =0 Arr [0]

とします。

インデックス0と3の間。3が最大です。インデックスi=3(maxx ==i)に到達したとき。したがって、最初のパーティションは[0,3,2,1]

です。

インデックス4の場合、最大は4です。インデックスi =4(maxx ==i)。したがって、2番目のパーティションは[4]

インデックス5の場合、最大値は5です。インデックスi =5(maxx ==i)。したがって、2番目のパーティションは[5]

合計3つのパーティション[0,3,2,1][4][5]。それぞれを並べ替えて連結します。

入力 − arr [] ={5,4,3,2,1,0}

出力 −パーティションの最大数− 1

説明 − 0から始めて、max =0 Arr [0]

とします。

インデックス0と5の間。5が最大です。インデックスi=5(maxx ==i)に到達したとき。したがって、パーティションのみが[5,4,3,2,1,0]

以下のプログラムで使用されているアプローチは次のとおりです

  • 0からNの範囲の数値で初期化された整数配列Num[]を使用します。

  • 関数partitions(int arr []、int n)は、配列とその長さをパラメーターとして受け取り、配列全体をソートするために個別にソートできる最大パーティションの数を返します。

  • 初期パーティションカウントは0です。初期最大値は、arr[0]としてmaxxにあります。

  • 左端の要素から始まるすべての要素。 maxxより大きいかどうかを確認します。

  • arr[i]>maxxがtrueの場合。 maxxを更新します。

  • 現在のmaxxとindexが同じ場合。 (maxx ==i)次に、iまでのすべての要素が1つのパーティションの一部になります。インクリメントカウント。

  • 右側の残りの要素について、これを最後まで行います。

  • 結果をカウントとして返します。

#include <bits/stdc++.h>
using namespace std;
int partitions(int arr[], int n){
   int count = 0;
   int maxx = arr[0];
   for (int i = 0; i < n; ++i) {
      if(arr[i] > maxx)
         maxx=arr[i];
      if (maxx == i)
         count++;
   }
   return count;
}
int main(){
   int Num[] = { 2,1,0,4,5,3 };
   int len = 6;
   cout <<"Maximum partitions that can be sorted: "<<partitions(Num, len);
   return 0;
}

出力

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

Maximum partitions that can be sorted: 18

  1. C++でN*Nチェス盤に配置できる最大のビショップ

    チェス盤のサイズを示す入力Nが与えられます。ここでのタスクは、Nの任意の値について、2人のビショップが互いに攻撃できないようにNXNチェス盤に配置できるビショップの数を見つけることです。例を挙げて理解しましょう。 入力 − n =2 出力 − N * Nチェス盤に配置できる最大のビショップ− 2(上記のように) 説明 −上に示したように、矛盾しない位置は司教が配置されている場所だけです。せいぜい2X2チェス盤のビショップ。 入力 − n =5 出力 − N * Nチェス盤に配置できる最大ビショップ:8(上記のように) 以下のプログラムで使用されているアプローチは次のとおりで

  2. C++で直角二等辺三角形に収まる正方形の最大数

    与えられたタスクは、底辺が「s」の二等辺三角形の中に収まる、辺が「a」の正方形の最大数を見つけることです(二等辺三角形には少なくとも2つの等しい辺があります)。 例を使用して、私たちがしなければならないことを理解しましょう: 入力 s=5, a=1 出力 10 説明 −基数の平方数は、sをaで割り、1を引くことで計算できます。したがって、基数の平方数=5/1 – 1 =4 同様に、下の4つの正方形を配置すると、base(s-a)の新しい二等辺三角形が得られます。次に同じ手順を繰り返して3つの正方形を取得し、1つの正方形が上に配置されるまで続けます。 入力 s=7, a=2 出力