为什么int mid = left + (right-left) / 2;比int mid = (left + right) / 2;运行的更快?
来源:8-1 二分算法简介
weixin_慕仙2234401
2021-12-26
老师,请问作业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; } }10
相似问题