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