vector<int> nums{5, 7, 7, 8, 8, 10}; int target = 8; intlower_bound1(){ int l = 0, r = nums.size() - 1; while(l <= r) { // [l, r] int m = l + (r - l) / 2; if(nums[m] < target) { // [m + 1, r] l = m + 1; }else { // [l, m - 1] r = m - 1; } } return l; // r + 1 }
左闭右开:
intlower_bound2(){ int l = 0, r = nums.size(); while(l < r) { // [l, r) int m = l + (r - l) / 2; if(nums[m] < target) { // [m + 1, r) l = m + 1; }else { // [l, m) r = m; } } return l; // r }
左开右开:
intlower_bound(){ int l = -1, r = nums.size(); while(l + 1 < r) { // (l, r) int m = l + (r - l) / 2; if(nums[m] < target) { // (m, r) l = m; }else { // (l, m) r = m; } } return r; // l + 1 }