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

C++でソート済みIIを作成するための最大チャンク


整数の配列arrがあるとすると、配列をいくつかのパーティションに分割し、各パーティションを個別にソートする必要があります。それらを連結した後、1つのソートされた配列を取得します。作成できるパーティションの最大数を見つける必要がありますか?

したがって、入力が[3,2,4,5,5]の場合、出力は4になります。これは、[3,2]、[4]、[5]、[5]のようなパーティションを作成できるためです。

これを解決するには、次の手順に従います-

  • cnt:=1

  • n:=arrのサイズ

  • サイズnの配列maxOfLeftを定義します

  • サイズnの配列minOfRightを定義します

  • maxOfLeft [0]:=arr [0]

  • 初期化i:=1の場合、i

    • maxOfLeft [i]:=maxOfLeft[i-1]とarr[i]

      の最大値
  • minOfRight [n-1] =arr [n-1]

  • 初期化i:=n-2の場合、i> =0の場合、更新(iを1つ減らす)、実行-

    • minOfRight [i]:=minOfRight [i+1]とarr[i]

      の最小値
  • 初期化i:=0の場合、i

    • minOfRight [i + 1]> =maxOfLeft [i]の場合、-

      • (cntを1増やします)

  • cntを返す

理解を深めるために、次の実装を見てみましょう-

#include <bits/stdc++.h>
using namespace std;
class Solution {
   public:
   int maxChunksToSorted(vector<int>& arr) {
      int cnt = 1;
      int n = arr.size();
      vector<int> maxOfLeft(n);
      vector<int> minOfRight(n);
      maxOfLeft[0] = arr[0];
      for (int i = 1; i < n; i++)
         maxOfLeft[i] = max(maxOfLeft[i - 1], arr[i]);
         minOfRight[n - 1] = arr[n - 1];
      for (int i = n - 2; i >= 0; i--)
         minOfRight[i] = min(minOfRight[i + 1], arr[i]);
      for (int i = 0; i < n - 1; i++) {
         if (minOfRight[i + 1] >= maxOfLeft[i])
         cnt++;
      }
      return cnt;
   }
};
main(){
   Solution ob;
   vector<int> v = {3,2,4,5,5};
   cout << (ob.maxChunksToSorted(v));
}

入力

{3,2,4,5,5}

出力

4

  1. C++でのライン上の最大ポイント

    2D平面があるとします。同じ直線上にある点の最大数を見つける必要があります。したがって、ポイントが次のような場合- それから4つのポイントがあります これを解決するには、次の手順に従います- n:=ポイントの数、n <3の場合、nを返します ans:=2 1からn–1の範囲のiの場合 カウント:=0 インデックスiとi– 1から2つのポイントを取ります。これらは、p1、p2です。 p1ポイントとp2ポイントが同じ場合、 0からn–1の範囲のjの場合 points [j] .x=p1.xおよびpoints[j].y =p1.yの場合、

  2. Pythonで配列をソートするための最大チャンクを見つけるプログラム

    配列番号があるとすると、配列をいくつかのパーティションに分割し、それぞれを個別に並べ替える必要があります。それらを連結した後、1つのソートされた配列を取得します。作成できるパーティションの最大数を見つける必要がありますか? したがって、入力が[3,2,4,5,5]の場合、出力は4になります。これは、[3,2]、[4]、[5]、[5]のようなパーティションを作成できるためです。 これを解決するには、次の手順に従います- real:=リスト番号を並べ替える p1:=0、p2:=1、c:=0 次のことを無限に行います。 フラグ:=True tmp:=numsの