C++の特定の間隔セット間で2つの間隔が重複していないかどうかを確認します
値(time1、time2)で構成される一連の間隔が与えられているとします。ここで、time1は開始時刻を表し、time2はイベントの終了時刻を表します。私たちのタスクは、これらの間隔のいずれかがこのセットの他の間隔と重複していないかどうかを確認することです。間隔のいずれかが重複している場合は結果をTrueとして返し、そうでない場合はFalseを返します。
したがって、入力が[(4,7)、(5,11)、(7,11)、(5,8)]のような場合、出力はTrueになります。
これを解決するには、次の手順に従います-
- リストinputArrを並べ替える
- 1からinputArrのサイズまでの範囲のiについては、
- if inputArr [i-1] .time2> inputArr [i] .time1 then
- Trueを返す
- Falseを返す
- if inputArr [i-1] .time2> inputArr [i] .time1 then
理解を深めるために、次の実装を見てみましょう-
例
#include <bits/stdc++.h> using namespace std; class IntervalClass { public: int time1, time2; }; bool compare(IntervalClass inst1, IntervalClass inst2){ return (inst1.time1 < inst2.time1) ? true : false; } bool solve(vector<IntervalClass> &inputArr){ int size = inputArr.size(); sort(inputArr.begin(), inputArr.end(), compare); for (int i = 1; i < size; i++) if (inputArr[i - 1].time2 > inputArr[i].time1) return true; return false; } int main(){ vector<IntervalClass> inputArr = {{4,7},{5,11},{7,11},{5,8}}; int size = sizeof(inputArr) / sizeof(inputArr[0]); cout << solve(inputArr); }
入力
{{4,7},{5,11},{7,11},{5,8}}
出力
1
-
特定のバイナリツリーがC++でヒープであるかどうかを確認します
コンセプト 与えられた二分木に関して、それがヒーププロパティを持っているかどうかを確認する必要があります。二分木はヒープであるために次の2つの条件を満たす必要があります– 二分木は完全なツリーである必要があります(つまり、最後を除くすべてのレベルがいっぱいである必要があります)。 二分木のすべてのノードの値は、その子ノード以上である必要があります(最大ヒープを考慮)。 例 次の例に関して、このツリーにはヒーププロパティが含まれています– 次の例にはヒーププロパティがありません– メソッド 完全性isComplete(この関数はバイナリツリーが完全で
-
特定のバイナリツリーがC++のSumTreeであるかどうかを確認します
ここでは、二分木が和木であるかどうかを確認する方法を説明します。ここで問題となるのは、合計ツリーとは何かです。合計ツリーは、ノードがその子の合計値を保持する二分木です。ツリーのルートには、その下にあるすべての要素の合計が含まれます。これは合計ツリーの例です- これを確認するために、簡単なトリックに従います。合計値がルートと同じである場合は、左右のサブツリー要素の合計を見つけます。これが合計ツリーです。これは再帰的なアプローチの1つになります。 例 #include <bits/stdc++.h> using namespace std; class node {