//JDK里的代码 private static int binarySearch0(int[] a, int fromIndex, int toIndex, int key) { int low = fromIndex; int high = toIndex - 1;//因为是闭区间,而toIndex是不在区间内的,所以需要-1
while (low <= high) {
int mid = (low + high) >>> 1;
int midVal = a[mid];
//这里的low和high分别在mid上进行加一和减一操作,也与左闭右闭保持了一致性
if (midVal < key)
low = mid + 1;
else if (midVal > key)
high = mid - 1;
else
return mid; // key found
}
//这里针对 low==0 而无法判断是否找到的情况
return -(low + 1); // key not found.
}
左开右闭
while (L < R) {
int mid = L + (R - L) / 2;
if (nums[mid] == target) {
return mid
} else if (nums[mid] < target) {
L = mid + 1
} else if (nums[mid] > target) {
R = mid
}
}
return L/R;
左闭右开
while (L < R) {
int mid = L + (R - L + 1) / 2;
if (nums[mid] == target) {
return mid
} else if (nums[mid] < target) {
L = mid
} else if (nums[mid] > target) {
R = mid - 1
}
}
return L/R;
左开右开
while (L + 1 < R) {
int mid = L + (R - L) / 2;
if (nums[mid] == target) {
return mid
} else if (nums[mid] < target) {
L = mid
} else if (nums[mid] > target) {
R = mid
}
}
if (nums[L] == target) {
return L;
}
if (nums[R] == target) {
return R;
}
return -1; // L