2組の時計の読み取り値の間の可能な限り最小の時間ギャップを見つけるためのC++プログラム
N個の要素を持つ配列Dがあるとします。コードフェスティバルでは、Amalを含むN+1人の参加者がいると考えてください。アマルはチェックし、彼の都市の現地時間とi番目の人の都市との間の時間差がD[i]時間であることを発見しました。 2つの都市間の時間差:任意の2つの都市AとBについて、都市Aの現地時間が0時の時点で、都市Bの現地時間がd時である場合、これら2つの都市間の時間差都市は最低d時間と24-d時間です。
ここでは、24時間表記を使用しています。次に、N + 1人から選ばれた2人のペアごとに、都市間の時間差を書き留めました。それらの間の最小の時間ギャップをs時間とします。 sの可能な最大値を見つける必要があります。
したがって、入力がD =[7、12、8]の場合、2番目と3番目の都市間の時間差は4時間であるため、出力は4になります。
ステップ
これを解決するには、次の手順に従います-
n := size of D sort the array D Define an array t insert 0 at the end of t for initialize i := 0, when i < n, update (increase i by 1), do: if i mod 2 is same as 0, then: insert D[i] at the end of t Otherwise insert 24 - D[i] at the end of t sort the array t ans := inf for initialize i := 1, when i < size of t, update (increase i by 1), do: ans := minimum of ans and t[i] - t[i - 1] return ans
例
理解を深めるために、次の実装を見てみましょう-
#include <bits/stdc++.h> using namespace std; int solve(vector<int> D) { int n = D.size(); sort(D.begin(), D.end()); vector<int> t; t.push_back(0); for (int i = 0; i < n; i++){ if (i % 2 == 0) t.push_back(D[i]); else t.push_back(24 - D[i]); } sort(t.begin(), t.end()); int ans = 1e9; for (int i = 1; i < t.size(); i++){ ans = min(ans, t[i] - t[i - 1]); } return ans; } int main(){ vector<int> D = { 7, 12, 8 }; cout << solve(D) << endl; }
入力
{ 7, 12, 8 }
出力
4
-
C++プログラムで二分木の2つのノード間の距離を見つける
この問題では、二分木と2つのノードが与えられます。私たちの仕事は、二分木の2つのノード間の距離を見つけるプログラムを作成することです。 問題の説明 2つのノード間の距離を見つける必要があります。これは、あるノードから別のノードに移動するときに通過するエッジの最小数です。 問題を理解するために例を見てみましょう 入力 :二分木 Node1 =3、Node2 =5 出力 :3 説明 5です。距離3を作る3つのエッジが通過します。 ソリューションアプローチ この問題の簡単な解決策は、特定のノードに最も低い共通の祖先ノードを使用してから、次の式を適用することです。 dista
-
C++で特定の円の2つの部分の角度の最小差を見つけるプログラム
この問題では、円の角度に基づいて円の一部を表す配列が与えられます。私たちのタスクは、C++で特定の円の2つの部分の角度の最小差を見つけるプログラムを作成することです 。 問題の説明 −配列内の円のすべての部分の角度が与えられます。作った2つのピースの角度の差が最小になるようにピースを結合する必要があります。 問題を理解するために例を見てみましょう 入力 ang[] = {90, 45, 90, 135} 出力 90 説明 1番目と2番目を一緒に取る、つまり90 + 45=135。 3番目と4番目を一緒に取る、つまり90 + 135 =225 差=225-135=90 ソリ