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

C++でソートする最大チャンク


[0、1、...、arr.length --1]の順列である配列arrを指定したとすると、配列をいくつかの「チャンク」に分割する必要があります。 "またはパーティション、および各パーティションを個別に並べ替えます。したがって、それらを連結した後、結果はソートされた配列になります。したがって、配列が[1,0,2,3,4]のような場合、出力は4になります。これは、[1、0]と[2,3,4]のような2つのパーティションに分割できるためですが、これは可能です。 [1、0]、[2]、[3]、[4]も同様です。つまり、これは可能な限り最大のチャンク数であるため、出力は4です。

作成できたチャンクの最大数はいくつですか?

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

  • ans:=0、minVal:=inf、n:=arrのサイズ、maxVal:=-inf
  • 0からnの範囲のiの場合
    • maxVal:=arr[i]とmaxValの最大値
    • maxVal =iの場合、ansを1増やします
  • 回答を返す

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

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

入力

[1,0,2,3,4]

出力

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の