力扣简278 第一个错误的版本
做题思路 考虑要求 尽量减少调用检查接口的次数 所以把这个查找次数尽可能减少
因为做的是一个题库里的题 这道题被划分在二分查找里面 其实根本想不到该用二分查找
然后直接套了一套二分查找 结果可能不太对 对于一些形如对搓搓和对错错错的用例会执行错误到mid指向最后一个正确的


/* 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 head=1,tail=n,mid=-1; while(head<=tail){ mid=head+(tail-head)/2; if(!isBadVersion(mid)){ head=mid+1; } else{ tail=mid-1; } } if(isBadVersion(mid)) return mid; return mid+1; } }
标准答案整体是有思维的 根据题意要求 相当于有序的序列里面找第一个错误的版本
所以整体就是在找错误 不断收敛区间 直到首尾相等 即为错误所在
但是标准答案反而更差 分析因为上面的想法直接mid+-1 收敛更快

public int firstBadVersion(int n) { int head=1,tail=n; while(head!=tail) { int mid=head+(tail-head)/2; if(isBadVersion(mid)) { tail=mid; } else head=mid+1; } return head; }

浙公网安备 33010602011771号