Leetcode Note: Go - First Bad Version
First Bad Version - LeetCode
https://leetcode.com/problems/first-bad-version/
- Go 言語で取り組んだメモ
所感
- 数値を isBadVersion で判定して、小さい値を探して return する
愚直に実装すると下記のようになるが、これだと制限時間内で処理が完了しないため、アルゴリズムを改良する必要がある
/** * Forward declaration of isBadVersion API. * @param version your guess about first bad version * @return true if current version is bad * false if current version is good * func isBadVersion(version int) bool; */ func firstBadVersion(n int) int { for i := 1; i < n; i++ { if isBadVersion(i) == true { return i } } return n }
回答
Go Benchmarking and profiling different versions - LeetCode Discuss
https://leetcode.com/problems/first-bad-version/discuss/1778578/Go-Benchmarking-and-profiling-different-versions
/**
* Forward declaration of isBadVersion API.
* @param version your guess about first bad version
* @return true if current version is bad
* false if current version is good
* func isBadVersion(version int) bool;
*/
func firstBadVersion(n int) int {
start := 0
end := n
for mid := (end + start) / 2; start < end; mid = (end + start) / 2 {
if isBadVersion(mid) {
end = mid
} else {
start = mid + 1
}
}
return start
}
- for ループの回し方をバイナリサーチに変更
- 中心の値からカウンタを始めて、更に中心の値を走査していく