C++で重複を削除するために削除する間隔の最小数を見つけるプログラム
一連の間隔があるとします。残りの間隔が重ならないようにするために削除する必要がある間隔の最小数を見つける必要があります。したがって、間隔が[[8,10]、[3,5]、[6,9]]の場合、他のすべてが重複しないように[6,9]を削除する必要があるため、出力は1になります。 。
これを解決するには、次の手順に従います-
- n:=配列のサイズ
- nが0の場合、0を返します
- count:=1
- 間隔の終了時間に基づいて配列を並べ替えます
- end:=最初の間隔の終了日
- 1からn–1の範囲のiの場合
- arr [i]> =の開始時刻が終了した場合、
- end:=到着の終了時刻[i]
- カウントを1つ増やします
- arr [i]> =の開始時刻が終了した場合、
- return n – count
理解を深めるために、次の実装を見てみましょう-
例
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
static bool cmp(vector <int>& a, vector <int>& b){
return a[1] < b[1];
}
int eraseOverlapIntervals(vector<vector<int>>& arr) {
int n = arr.size();
if(!n)return 0;
int cnt = 1;
sort(arr.begin(), arr.end(), cmp);
int end = arr[0][1];
for(int i = 1; i < n; i++){
if(arr[i][0] >= end){
end = arr[i][1];
cnt++;
}
}
return n - cnt;
}
};
main(){
vector<vector<int>>
v = {{8,10},{3,5},{6,9}};
Solution ob;
cout << (ob.eraseOverlapIntervals(v));
} 入力
{{8,10},{3,5},{6,9}} 出力
1
-
C ++で数値dを加算した後、可能な最小の桁の合計を求めます
この問題では、2つの数nとdが与えられます。私たちのタスクは、数値dを加算した後、可能な最小の桁の合計を見つけることです。 問題の説明 − dのk番目の倍数をnに加算して、桁の合計を最小化する必要があります。 問題を理解するために例を見てみましょう 入力 n = 5230, d = 54 出力 1 説明 The number will be 5230 + (2*54) = 5338 ソリューションアプローチ この問題を解決する簡単な方法は、1から8までのdのすべての倍数をチェックすることです。これは、9番目の倍数で桁の合計が繰り返されるためです。これはモジュロ9に基づいており、数字の合
-
C++で対戦相手を捕まえるために必要な最小ステップ数を見つけるためのプログラム
[u、v]の形式のツリーエッジのリストがあると仮定します。これは、uとvの間に無向エッジがあることを示します。また、xとyの2つの値があります。ノードxにいて、対戦相手がノードyにいる場合。最初のラウンドでは移動し、次のラウンドでは対戦相手が移動します。対戦相手は、ラウンドで移動しないことを選択できます。対戦相手を捕まえるのに必要な最小ラウンド数を見つける必要があります。 したがって、入力がedges =[[0、1]、[0、2]、[1、3]、[1、4]]、x =0、y =3のような場合、出力は3になります。最初と同じように、ノード0から1に移動します。その後、対戦相手は現在のノード3に留まり