「搜索左侧边界」的二分搜索算法的具体代码实现如下:

    1. // 搜索左侧边界
    2. int left_bound(int[] nums, int target) {
    3. if (nums.length == 0) return -1;
    4. int left = 0, right = nums.length;
    5. while (left < right) {
    6. int mid = left + (right - left) / 2;
    7. if (nums[mid] == target) {
    8. // 当找到 target 时,收缩右侧边界
    9. right = mid;
    10. } else if (nums[mid] < target) {
    11. left = mid + 1;
    12. } else if (nums[mid] > target) {
    13. right = mid;
    14. }
    15. }
    16. return left;
    17. }

    「搜索右侧边界」的二分搜索算法的具体代码实现如下:

    1. // 搜索右侧边界
    2. int right_bound(int[] nums, int target) {
    3. if (nums.length == 0) return -1;
    4. int left = 0, right = nums.length;
    5. while (left < right) {
    6. int mid = left + (right - left) / 2;
    7. if (nums[mid] == target) {
    8. // 当找到 target 时,收缩左侧边界
    9. left = mid + 1;
    10. } else if (nums[mid] < target) {
    11. left = mid + 1;
    12. } else if (nums[mid] > target) {
    13. right = mid;
    14. }
    15. }
    16. return left - 1; //return right - 1;
    17. }