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

C++での最大の互いに素な間隔


説明

N個の区間のセットが与えられた場合、タスクは相互に素な区間の最大セットを見つけることです。 2つの区間[i、j]と[k、l]は、共通点がない場合、互いに素であると言われます

間隔が{{10、20} {23、35}、{15、21}、{37、41}}の場合、重複しない最大の互いに素なペアは-

{10, 20}
{23, 35}
{37, 41}

{10、20}

と重複するため、{15、21}を含めることはできません。 アルゴリズム
1. Sort the intervals, with respect to their end points.
2. Traverse the all intervals, if we get two overlapping intervals, then choose the interval with lower end point. Choosing such interval will ensure that intervals further can be accommodated without any overlap
3. Repeat the same procedure for all the intervals and print all the intervals which satisfy these criteria

#include <bits/stdc++.h>
using namespace std;
bool sortFun(pair<int, int> &a, pair<int, int> &b){
   return (a.second < b.second);
}
void getMaxDisjointInterval(vector<pair<int, int>> intervals){
   sort(intervals.begin(), intervals.end(), sortFun);
   cout << "{" << intervals[0].first << ", " << intervals[0].second << "}\n";
   int r1 = intervals[0].second;
   for (int i = 1; i < intervals.size(); ++i) {
      int l1 = intervals[i].first;
      int r2 = intervals[i].second;
      if (l1 > r1) {
         cout << "{" << l1 << ", " << r2 << "}\n";
         r1 = r2;
      }
   }
}
int main(){
   int n = 4;
   vector<pair<int, int>> intervals = {
      {10, 20},
      {23, 35},
      {15, 21},
      {37, 41}
   };
   cout << "Max disjoint pairs are:\n";
   getMaxDisjointInterval(intervals);
   return 0;
}

出力

上記のプログラムをコンパイルして実行する場合。次の出力を生成します-

Max disjoint pairs are:
{10, 20}
{23, 35}
{37, 41}

  1. C++でのラインリフレクション

    2D平面上にn個の点があるとすると、指定された点を対称的に反射するy軸に平行な線があるかどうかを確認する必要があります。つまり、指定された線上にすべての点を反映した後に線が存在するかどうかを確認する必要があります。元のポイントのセットは、反映されたポイントと同じです。 したがって、入力がpoints =[[1,1]、[-1,1]]のような場合 その場合、出力はtrueになります これを解決するには、次の手順に従います- 1つのセットを定義します。 n:=ポイントのサイズ minVal:=inf maxVal:=-inf 初期化i:=0の場合、i <

  2. C++の対角トラバースII

    numsというリストのリストがあるとすると、numsのすべての要素を対角線順に表示する必要があります。 したがって、入力が次のような場合 その場合、出力は[1,6,2,8,7,3,9,4,12,10,5,13,​​11,14,15,16]になります。 これを解決するには、次の手順に従います- 配列retを定義する 1つの2Dアレイvを定義する 初期化i:=0の場合、i