数据科学家的三大能力生死线:可信性、鲁棒性与解释性
2026/7/19 10:40:15
二分查找(Binary Search)是一种在有序数组中高效查找目标值的算法。其核心思想是:
nums(有序)n = nums.size()target二分查找有两种常见的区间表示方法:
[0, n-1](最后一位的实际索引为n-1)[0, n)(右边界不包含)int left = 0; int right = n - 1; // 右边界包含 while (left <= right) { // 左闭右闭时,left == right 仍有意义 int mid = left + (right - left) / 2; // 防止溢出 if (target < nums[mid]) { // target 位于左侧区间 right = mid - 1; // 更新右边界,mid 已排除 } else if (target > nums[mid]) { // target 位于右侧区间 left = mid + 1; // 更新左边界,mid 已排除 } else { return mid; // 找到目标值 } } return -1; // 未找到关键点:
left <= right(左闭右闭区间有效)right = mid - 1或left = mid + 1(mid 已检查,需排除)left + (right - left) / 2计算 midint left = 0; int right = nums.size(); // 右边界不包含 while (left < right) { // 左闭右开时,left == right 无意义 int mid = left + (right - left) / 2; // 防止溢出 if (target < nums[mid]) { // target 位于左侧区间 [left, mid) right = mid; // 更新右边界,mid 不包含 } else if (target > nums[mid]) { // target 位于右侧区间 [mid+1, right) left = mid + 1; // 更新左边界,mid 已排除 } else { return mid; // 找到目标值 } } return -1; // 未找到关键点:
left < right(左闭右开区间有效)right = mid或left = mid + 1(mid 已检查,需排除)left + (right - left) / 2计算 mid[left, right)表示包含 left,不包含 right