古典的なインタビューの質問[Antoverthepole]Golangコードの詳細
インタビュー質問銀行[極上のアリ]1.一般的な問題
27cmの細い木の棒があり、3cm、7cm、11cm、17cm、23cmの5つの位置のそれぞれにアリがいます。木の棒はとても薄いので、同時に1匹のアリを追い越すことはできません。最初は、アリが頭を左に向けるか右に向けるかは任意でした。彼らはただ前に歩くか、向きを変えるだけで、後ろには向きませんでした。2匹のアリが出会うと、両方のアリが向きを変え、同時に反対方向に進みます。アリが毎秒1センチメートルの距離を歩くことができると仮定します。
すべてのダウンスイングの最短時間を見つけますか?
回答:11
すべてのダウンスイングの最長時間はどれくらいですか?
回答:24
第二に、詳細なアイデア
1.既知の条件
タイトルから、既知の条件は次のとおりです。
- 長さ27cm。
- 3cm、7cm、11cm、17cm、23cm。
- 1匹のアリだけ。
- 彼らが出会うと、2匹のアリは反対方向に進みます
思考を切り替える
アリが出会って振り返ると、すれ違うアリ、つまり時間を無駄にすることなく出会うアリと見なすことができます。
つまり、1 2が出会った場合、頭を回した後の2は1と見なされ、頭を回した後の1は2と見なされます。
すべてのアリの中で最も短いものと最も長いものが求められるため、アリ間の数の交換は影響を受けません。
時間は、各アリが初期位置から木の棒を離れるまで直接行くシーンを計算することです。
ganLength := 27 //杆的长度
position := [5]int{
3, 7, 11, 17, 23} //蚂蚁初始位置
speed := 1 //蚂蚁的速度
maxTime := 0 //最长时间
minTime := 0 //最短时间
2.詳細なコード
木の棒の中心を基準に、左側のアリが左に、右側のアリが右に行くのが最短時間です。
木の棒の中心を基準に、左側の蟻が右に、右側の蟻が左に行くのが最も長い時間です。
package main
import "fmt"
func main() {
ganLength := 27 //杆的长度
position := [5]int{
3, 7, 11, 17, 23} //蚂蚁初始位置
speed := 1 //蚂蚁的速度
maxTime := 0 //最长时间
minTime := 0 //最短时间
for _, v := range position {
tempMax := 0 //最长时间
tempMin := 0 //最短时间
if v < ganLength/2 {
//中点左边
tempMax = (ganLength - v) / speed
tempMin = v / speed
} else {
//中点右边
tempMax = v / speed
tempMin = (ganLength - v) / speed
}
// 如果存在更晚的下杆时间,那么全部下杆的最长时间变成最新的值
if maxTime < tempMax {
maxTime = tempMax
}
// 如果存在更晚的下杆时间,那么全部下杆的最短时间变成最新的值
if minTime < tempMin {
minTime = tempMin
}
}
fmt.Println(minTime, maxTime)
}
3.結果
完了し、単純な知的論理の質問の分析を実現します
要約する
極を横切るアリは、古典的なアルゴリズムのインタビューの質問です。論理をより明確に理解し、コードを通じて考え方を変えることができます。
このブログがお役に立てば幸いです。私は光の王であり、自分自身で話します。