问题:
实施int sqrt(int x)
。
计算并返回x
的平方根
例如:
sqrt(3) = 1
sqrt(4) = 2
sqrt(5) = 2
sqrt(10) = 3
我的代码:
def sqrt(self, x):
# write your code here
if x == 0:
return x
start = 1
end = x
while start + 1 < end:
mid = (end - start)/2
if mid*mid == x:
return mid
if mid*mid < x:
start = mid
else:
end = mid
if end*end <= x:
return end
return start
错误提示:
您的代码运行时间超出了我们的预期。检查你的时间复杂性。如果您的时间复杂度最佳,则超出时限通常是由无限循环引起的。
我的问题:如何改善它?
答案 0 :(得分:1)
代码中的主要错误是使用mid = (end-start)//2
而不是mid = (end+start)//2
来计算中间值。这创造了无限循环。所以你离解决方案不远:
def sqrt(x):
if x == 0:
return x
start = 1
end = x
while start+1 < end:
mid = (end + start) // 2
delta = mid*mid - x
if delta < 0:
start = mid
elif delta > 0:
end = mid
else:
return mid
return start
for x in (2, 5, 9, 13, 18, 24, 27):
print("sqrt(%s) ~= %s" % (x, sqrt(x)))
产生以下输出:
sqrt(2) ~= 1
sqrt(5) ~= 2
sqrt(9) ~= 3
sqrt(13) ~= 3
sqrt(18) ~= 4
sqrt(24) ~= 4
sqrt(27) ~= 5
答案 1 :(得分:0)
@Abhishake gupta,谢谢,它有效。有一个小错误:
def sqrt(self, x):
# write your code here
if x == 0 or x == 1:
return x
i = 1
result = 1
while result <= x:
if result == x:
return i
i += 1
result = i*i
return i-1