// (left, right], left == right 区间为空 // left 始终 < target // right + 1始终 >= target while (left < right) { intmid= left + (right - left + 1) / 2; if (nums[mid] < target) left = mid; else right = mid - 1; }
return right + 1; }
这里会有个额外的问题是mid向下取整, 会在left = -1, right = 0的时候取到-1, 所以我们需要调整成向上取整, 在left = -1, right = 0的时候取整到0, 就会不落到区间外面了
左闭右开
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
privateintlower_bound(int[] nums, int target) { intleft=0; intright= nums.length;
// [left, right), left == right 区间为空 // left - 1始终 < target // right 始终 >= target while (left < right) { intmid= left + (right - left) / 2; if (nums[mid] < target) left = mid + 1; else right = mid; }