leetcode - Sqrt(x) -- 再看

https://leetcode.com/problems/sqrtx/

与求pow(x,n).思路不一样。这里是直接二分搜索。或者还有牛顿法直接求。参考:http://bookshadow.com/weblog/2015/08/29/leetcode-sqrtx/

这里要记得先update i,j, 再update mid

class Solution(object):
    def mySqrt(self, x):
        """ :type x: int :rtype: int """
        if x < 0:
            return -1

        i = 0
        j = x
        mid = x/2
        while i <= j:
            check = mid ** 2
            if check == x:
                return mid
            elif check > x:
                j = mid - 1
            else:
                i = mid + 1
            mid = (i + j) / 2
        return mid

或者按照常用的二分code,但是最后返回的是 j。

class Solution(object):
    def mySqrt(self, x):
        """ :type x: int :rtype: int """
        i,j = 1, x

        while i<=j:
            mid = ( i + j )/2
            if mid**2 > x:
                j = mid - 1
            else:
                i = mid + 1
        return j

关于二分查找,

i = 0, j = len(num) - 1

while i<=j:这里肯定是小于等于

然后看是return 什么。

用num只有一个元素,以及num有两个,三个元素举例子决定如何return,是return mid还是return i或者 j

你可能感兴趣的:(LeetCode)