問題描述
Implement int sqrt(int x).
Compute and return the square root of x.
問題分析
- naive方法:從0到x遍歷,找到sqrt(x);
- 二分查找:從0到x二分查找,找到sqrt(x);
- 改進二分查找:下界從0開始是沒跑了,上界卻不必是x,x/2+1就夠了。
AC代碼
class Solution(object):
def mySqrt(self, x):
"""
:type x: int
:rtype: int
"""
p = 0
q = x / 2 + 1
m = None
while p <= q:
m = (p + q)/2
if m * m == x:
break
if m * m > x:
q = m - 1
else:
p = m + 1
return m if m * m == x else p-1
Runtime: 68 ms, which beats 72.99% of Python submissions.