二进制搜索进入无限循环

时间:2017-08-20 16:01:17

标签: python-3.x binary-search

我试图找出一个数字是否是一个完美的正方形。我有一个简单的二进制搜索算法来做到这一点,最终进入无限循环。我似乎无法找到解决方法。有人可以帮我这个。

def isPerfectSquare(self, num):
        """
        :type num: int
        :rtype: bool
        """
        if num < 1:
            return False
        start, end = 1, num
        while start <= end:
            mid = (end - start)//2
            if mid * mid == num:
                return True
            elif mid * mid < num:
                start = mid + 1
            else:
                end = mid
        return False

1 个答案:

答案 0 :(得分:0)

我找到了问题, 这是代码行,最后是错误的mid,

mid = (end - start)//2

因为我们实际上想要一个正中半部分,所以代码将是,

mid = start + (end - start) // 2 这解决了它。