每日一题
背包问题我唯唯诺诺,二分查找我重拳出击!
简单的二分查找,但是博主超了时…
先附上超时代码块
/* The isBadVersion API is defined in the parent class VersionControl.
boolean isBadVersion(int version); */
public class Solution extends VersionControl {
public int firstBadVersion(int n) {
int l = 1;
int r = n;
while(l < r){
int mid = (l + r)/2;// 问题就在这里
if(isBadVersion(mid)){
r = mid;
}else{
l = mid + 1;
}
}
return l;
}
}
int mid = ( l +r )/2;在left和right较大的时候会发生整形溢出。
So,换种写法让他不溢出。
int mid = l + (r - l) / 2;
最后忍不住想插句话啊,2126753390个版本这个测试用例是人想出来的?