【LintCode-二分搜索】141. Sqrt(x)
程序员文章站
2022-05-13 20:10:46
...
lintcode 141. Sqrt(x)
url: https://www.lintcode.com/problem/sqrtx/description
1、题目
Description
Implement int sqrt(int x).
Compute and return the square root of x.
Example
Example 1:
Input: 0
Output: 0
Example 2:
Input: 3
Output: 1
Explanation:
return the largest integer y that y*y <= x.
Example 3:
Input: 4
Output: 2
Challenge
O(log(x))
2、思路
经典的二分搜索,在[0, x/2+1]的范围内搜索
3、python代码实现
# -*- coding: utf-8 -*-
class Solution:
"""
@param x: An integer
@return: The sqrt of x
"""
def sqrt(self, x):
if x < 0:
return -1
head = 0
tail = x // 2 + 1
mid = head + (tail - head) // 2
while head <= tail:
mid = head + (tail - head) // 2
sq = mid * mid
sq_1 = (mid + 1) * (mid + 1)
if sq < x:
if sq_1 > x:
return mid
elif sq_1 == x:
return mid + 1
head = mid + 1
else:
tail = mid - 1
return mid
if __name__ == '__main__':
s = Solution()
print(s.sqrt(0))
print(s.sqrt(1))
print(s.sqrt(4))
print(s.sqrt(6))
print(s.sqrt(100))
print(s.sqrt(120))
print(s.sqrt(1000))
print(s.sqrt(2147483647))