一般二分查找法是针对数组中的排列规律进行操作,也就是对索引的规律进行操作。 切记,尽量不要对值的变化进行操作。
最后return 才能是nums[index]
假设你有 n 个版本 [1, 2, …, n],你想找出导致之后所有版本出错的第一个错误的版本。
你可以通过调用 bool isBadVersion(version) 接口来判断版本号 version 是否在单元测试中出错。
在 public int firstBadVersion(int n) {
int l = 1;
int r = n;
while(l<=r){
int m = (r-l)/2+l;
if(isBadVersion(m)){
r = m-1;
}
else{
l = m+1;
}
}
return l;
}
public int singleNonDuplicate(int[] nums) {
int l = 0;
int r = nums.length-1;
while(l<r){
int m = (r-l)/2 + l;
if(m%2 == 1){
m--;
}
if(nums[m] == nums[m+1]){
l = m+2;
}
else{
r = m;
}
}
return nums[l];