二分查找应用:求x的平方根

40 阅读1分钟

思路:

暴力解法:从 0 开始逐步递增,求平方,找到相等或者比他小的最大值,就找到了平方根

二分查找

func mySqrt(x int) int {
	left, right := 1, x
	mid := left + (right-left)/2
	for left <= right {
		if mid*mid == x {
			//注意,平方是mid*mid,mid^2是异或!
			//if mid^2 == x {
			return mid
		} else if mid*mid > x {
			right = mid - 1
		} else {
			left = mid + 1
		}
		mid = left + (right-left)/2
	}
	return left - 1
}