二分查找)
二分查找算法核心思想二分查找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 1mid 已检查需排除防止溢出使用left (right - left) / 2计算 mid左闭右开写法int 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 位于右侧区间 [mid1, right) left mid 1; // 更新左边界mid 已排除 } else { return mid; // 找到目标值 } } return -1; // 未找到关键点循环条件left right左闭右开区间有效边界更新right mid或left mid 1mid 已检查需排除防止溢出使用left (right - left) / 2计算 mid区间含义[left, right)表示包含 left不包含 right