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
-
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の