Leetcode Q 69. Sqrt(x) - 为什么添加 () 超出时间限制,at -> int mid = (first + (last - first)) / 2;

问题描述 投票:0回答:1

这段代码工作正常://我使用二分搜索来查找它

class Solution {
public:
    int mySqrt(int x) {
        //base cases
        if( x==0){
            return x;
        }

        long long int first = 1, last = x;
        while(first <= last){
            int mid = first + (last - first) / 2;
            if(mid == x/mid){
                return mid;
            }
            else if(mid >( x /mid)){
                last = mid -1;
            }
            else{
                first = mid + 1;
            }
        }
        return last;
    }
};

但是如果我更换

int mid = first + (last - first) / 2;
int mid = (first + (last - first)) / 2;
那么就超出了时间限制,为什么呢?

c++ c binary-search square-root
1个回答
0
投票

first + (last - first) / 2
(1) 和
(first + (last - first)) / 2
(2) 不相等。您可能需要
(first + last) / 2
(3)。

first + (last - first) / 2 = (1)
first / 2 + last / 2 =
(first + last) / 2           (3)
© www.soinside.com 2019 - 2024. All rights reserved.