请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

为什么int mid = left + (right-left) / 2;比int mid = (left + right) / 2;运行的更快?

老师,请问作业leetcode第278题
为什么int mid = left + (right-left) / 2;比int mid = (left + right) / 2;运行的更快?

public class Solution extends VersionControl {
    public int firstBadVersion(int n) {
        int left = 0, right = n;
        while(left < right) {
            // 这里为什么写成int mid = (left + right) / 2就会超时?
            int mid = left + (right-left) / 2;
            if(isBadVersion(mid)) right = mid;
            else left = mid+1;
        }
        return left;
    }
}

正在回答

1回答

同学您好。

因为left + right可能会超过int范围。 可以改成把left和right改成long。但是mid还是要int。或者中间暂时用long计算。


正确代码如下:

public class Solution extends VersionControl {
    public int firstBadVersion(int n) {
        int left = 0, right = n;
        while(left < right) {
            int mid = (int) ((((long) left) + right) / 2);
            if(isBadVersion(mid)) right = mid;
            else left = mid+1;
        }
        return (int) left;
    }
}


1 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信