創造を続け、成長を加速させましょう!「ナゲッツデイリーニュープラン・6月アップデートチャレンジ」に参加した初日です。クリックしてイベントの詳細をご覧ください。
このブラッシング日記の48番目の記事のタイトルは次のとおりです。17.11。単語の距離、中
1.トピックの説明:
久しぶりですが、今日も質問を見直していきましょう。最近忙しいです。忙しい人ほど成長が鈍いことがわかりました。自分のことを深く考える時間が少ないからだと思います。自分自身と話す時間が少なくなります。
質問を磨き続け、思考を練習する
2.この質問はどのような考えを検討しますか?あなたはどう思いますか?
このトピックが私たちに何を伝えているかを詳しく見てみましょう。
- 与えられた単語の束の中の2つの単語間の最も近い距離を見つける必要があります
- 与えられた2つの単語は、この単語の山の中で何度も繰り返され、繰り返しの数はランダムです
それで、群衆の中で、2人の人が隣り合って最も近い距離はどれくらいか、または2人が隣り合っているときに最も近い距離はどれくらいかを知っています。
上記の単語のグループと同様にa
、nice
と2つの単語の間の最も近い距離を見つけたいので、さまざまな状況でこれら2つの単語が隣接しているときに最小の距離を見つける方法を見つけます。
次に、この問題に対処するためにダブルポインタを使用することを考えることができます。
または上の写真が表すもの
- 初期化時にword1のデフォルトの現在位置を表すp1を定義し、word2のデフォルトの現在位置を表すp2を定義しましょう。
- 現在の単語がword1と一致している場合は、指定された単語をトラバースし、位置をp1に割り当てます。
- 同様に、word2の現在の位置をp2に割り当てます
- p1とp2の両方が以上であることが確認されると、単語のトラバースが完了するまでそれらの差が計算され、すべての差の最小値を取得できます。
ただし、ここではp1、p2の初期化に注意する必要があります。現在の位置は-1です。ここではあまり説明する必要はありませんが、比較的大きく、単語の長さとして指定できる数値を初期化する必要があります。
これの目的は、ロジックを明確に保ち、計算エラーを回避し、取得された最小値が初めて最小値を比較するときに実際の値でなければならないことを確認することです。
3.コーディング
上記の論理と分析によれば、それを次のコードに変換することができます
エンコーディングは次のとおりです。
func findClosest(words []string, word1 string, word2 string) int {
var p1,p2 = -1,-1
// 此处需要注意定义 res 的时候,可以大一点,可以为整个 words 的长度,这是为了避免咱们在计算两个单词最小值的时候,计算出错
var res = len(words)
for index,w := range words {
if w == word1 {
p1 = index
}
if w == word2 {
p2 = index
}
if p1 >=0 && p2 >= 0{
res = min(help(p1,p2) , res)
}
}
return res
}
func help (a,b int) int {
if a > b{
return a-b
}
return b-a
}
func min (a,b int) int {
if a > b {
return b
}
return a
}
复制代码
4.要約:
ここでは、このダブルポインターの実装では、単語配列を1回だけトラバースするため、ここでの時間計算量はO(n)であることがわかります。
スペースの複雑さは比較的明確であり、紹介するスペース消費量はO(1)です。
元のタイトルアドレス:インタビューの質問17.11。単語の距離
私は今日ここにいます、私が学んだこと、何か逸脱があれば、私を訂正してください
いいね、フォロー、お気に入りへようこそ
友達、あなたのサポートと励ましは、私が共有を続け、品質を向上させる動機です
さて、これが今回です
テクノロジーはオープンであり、私たちの精神はオープンでなければなりません。変化を受け入れ、太陽の下で生き、そして前進しなさい。
私は小悪魔の少年哪吾です、好きで、フォローして集めて、また会いましょう〜