查找左边界

  1. int left = 0;
  2. int right = len - 1;
  3. while(left <= right) {
  4. int mid = left + (right - left) / 2;
  5. if(nums[mid] < target) {
  6. left = mid + 1;
  7. } else {
  8. right = mid - 1;
  9. }
  10. }
  11. 左边界 = left;

如果所查找的目标值不在数组中,分为三种情况:

  • 目标值小于任何一个元素,所得结果为 left = 0 , right = -1.
  • 目标值大于任何一个元素,所得结果为 left = len, right = len - 1.
  • 目标值在数组范围内,所得结果见实例:

在数组 [5, 7, 7, 8, 8, 10] 中 target = 6 的左边界为 1.

查找右边界

  1. int left = 0;
  2. int right = len - 1;
  3. while(left <= right) {
  4. int mid = left + (right - left) / 2;
  5. if(nums[mid] <= target) {
  6. left = mid + 1;
  7. } else {
  8. right = mid - 1;
  9. }
  10. }
  11. 右边界 = right;

如果所查找的目标值不在数组中,分为三种情况:

  • 目标值小于任何一个元素,所得结果为 left = 0 , right = -1.
  • 目标值大于任何一个元素,所得结果为 left = len, right = len - 1.
  • 目标值在数组范围内,所得结果见实例:

在数组 [5, 7, 7, 8, 8, 10] 中 target = 6 的左边界为 0.

查找某个目标

直接套用查找左边界的代码,返回的值即为目标值在数组中的下标。
若数组中没有该目标值,返回值表示数组中有多少元素比目标值小。