一緒に書く習慣をつけましょう!「ナゲッツデイリーニュープラン・4月アップデートチャレンジ」に参加して6日目です。クリックしてイベントの詳細をご覧ください。
[ブラシ質問ダイアリー]1791。スターグラフの中央ノードを見つける
このブラッシング日記の26番目の記事のタイトルは次のとおりです。[質問ダイアリーのブラッシング]1791。スターグラフの中央ノードを見つける、簡単
1.トピックの説明:
昨日は残業が遅くて毎日の質問をブラッシュアップする時間がなく、今日は残業から少し遅れて戻ってきましたが、シンプルな絵だったのでブラッシュしてみましょう。
私の知る限り、写真に関する質問の数が比較的多いため、インタビューでは写真をテストしないため、私の周りの友人は写真関連の質問をブラッシングしません。
でも、絵を上手に学べば、街の最短距離など、人生の多くの問題を解決できると思います。
トピックを詳しく見てみましょう
2.この質問はどのような考えを検討しますか?あなたはどう思いますか?
この質問を注意深く見ると、どのような重要な情報が私たちに明らかになりますか。
- これは無向グラフです。ノードとノードの後に矢印はなく、次数内と次数外はありません。
- 無向グラフによって形成されるグラフは星です。つまり、ノードの数は常にエッジの数より1大きくなります。ノードの数がnの場合、エッジの数はn-1になり、その逆も同様です。
- タイトルで与えられたエッジの関係を通して、中央ノードを見つけます
上記の重要な情報を取得した後、それについて考えることができます。**上記の状況では、中央ノードとは何ですか?**どのようにデジタルで定義できますか?
例を見て、効果を見てみましょう。
たとえば、次の星の図:
合計6つのノードと5つのエッジがあり、これらの5つのエッジが中央ノードに接続されていることがわかります。したがって、ノードの次数を考えるのは難しくありません。もちろん、根拠がない場合グラフ理論については、それを追加することができます。
簡単に理解すると、無向グラフの場合、ノードに接続されているエッジの数は、このノードの次数がエッジの数になります。
次に、上の図に基づいて、次のことがわかります。
- 4つのノードの次数は5です
- 1、2、3、5、6ノードはすべて次数1です
データを通じて、実際には、エッジの数に等しいノードの次数を見つければ、この問題を解決できることが明らかになりました。
OK、次のステップは上記のアイデアを翻訳することです。
3.コーディング
上記の論理と分析によれば、次のコードに変換できます。コードを変換するときは、ノードの次数の計算方法とスペースの展開に注意する必要があります。
エンコーディングは次のとおりです。
func findCenter(edges [][]int) int {
// 得到节点的数量,等于边的数量 + 1
length := len(edges) + 1
// 此处开辟的空间是 length+1 , 是因为节点的数字不是从 0 开始的,而是从 1 开始的
g := make([]int,length+1)
// 计算每一个节点的 度
for _,e := range edges {
g[e[0]]++
g[e[1]]++
}
// 找到节点度为 节点数 -1 的节点,则这个节点就是中心节点
for i,num := range g {
if num == length-1{
return i
}
}
return -1
}
复制代码
上記のコードを見ると、ノードに対応する次数を格納するためにスペースを開くとき、インデックスは1から始まることに注意する必要があります。たとえば、ノードが4つある場合、開くヘルプスペースは4+1です。
4.要約:
明らかに、ここでは、ノードの次数が要件を満たしているかどうかを判断するために各ノードをトラバースする必要があるため、時間計算量がO(n)であることがわかります。
ノード数+1のヘルプスペースを開く必要があるため、スペースの複雑さもO(n)です。
元のタイトルアドレス:1791。スターグラフの中央ノードを見つけます
私は今日ここにいます、私が学んだこと、何か逸脱があれば、私を訂正してください
いいね、フォロー、お気に入りへようこそ
友達、あなたのサポートと励ましは、私が共有し続け、品質を向上させる動機です
さて、これが今回です
テクノロジーはオープンであり、私たちの精神はオープンでなければなりません。変化を受け入れ、太陽の下で生き、前進します。
私は小悪魔の少年哪吾です、好きで、フォローして集めて、また会いましょう〜