首先介绍下二分查找
三个条件:
- sorted(单调递增或者递减)
- Bounded(存在上下界)
- Accessible by index(能够通过索引访问)
代码模版(python)
left, right = 0, len(array) - 1
while left <= right:
mid = (left + right)/2
if array[mid] == target:
#find the target
break(or return result)
elif array[mid] < target:
left = mid + 1
else:
right = mid -1
69.X的平方根
题目:
运用二分查找解决:
class Solution(object):
def mySqrt(self, x):
if x == 0 or x == 1:
return x
l, r = 1, x
while l <= r:
mid = (l+r)//2
if mid*mid <= x < (mid+1)*(mid+1):
return mid
elif mid*mid > x:
r = mid
else:
l = mid +1
另解:牛顿迭代法链接:牛顿迭代法
class Solution(object):
def mySqrt(self, x):
r = x
while r*r > x:
r = (r + x/r)/2
return r
367. 有效的完全平方数
二分搜索解法
class Solution(object):
def isPerfectSquare(self, num):
if num == 1:
return True
l, r = 1, num
while l <= r:
m = l +(r-l)//2
if m*m == num:
return True
elif m*m < num and (m+1)*(m+1) > num:
return False
elif m > num/m:
r = m
else:
l = m+1
如有问题,欢迎留言