当target存在且重复时, int mid = l + (r - l) /2 找到的是最左边的target,一定要左+1,保留右
⚠️target不存在时,找到的是小于target的第一个元素
图示
当target存在且重复时, int mid = l + (r - l + 1) /2 找到的是最右边的target,一定要右-1,保留左
⚠️target不存在时,找到的是大于target的第一个元素
力扣 二分查找重复元素的最左和最右
class Solution {public int[] searchRange(int[] nums, int target) {if(nums.length == 0) return new int[]{-1,-1};int l = 0,r = nums.length-1;int right = -1,left = -1;while(l < r){int mid = l + (r-l) / 2;if(nums[mid] < target){l = mid+1;}else r = mid;}left = nums[l] == target ? l : -1;l = 0;r = nums.length-1;while(l < r){int mid = l + (r-l + 1) / 2;if(nums[mid] <= target){l = mid;}else r = mid - 1;}right = nums[l] == target ? r : -1;return new int[]{left,right};}}
