在排序数组中寻找元素的第一和最后的一个位置
给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。
如果数组中不存在目标值 target,返回 [-1, -1]。
来源:力扣(LeetCode)
分析:先判断 开头结尾是否与目标值target 相等 ,最后一个位置是否小于等于总长度,
最左边的位置下标是否小于或者等于右边位置下标
if(nums[leftIdx]==target&&nnums[rightIdx]==traget&&leftIdx<=rightIdx&&rightIdx<nums.length){nums[-1,-1]} 然后再使用二分法算出位置
并设置左右位置函数
int leftIdx=binarySearch(nums,target,true)
intleftIdx=binarySearch(nums,target ,false)-1
???? 用mid.length来判断布尔值
开始编写代码
class Solution{
public int[] SearchRange(int [] nums,int target){
//设置左右下标查找函数
int leftIdx=binarySearch(nums,target,true);
int rightIdx=binarySearch(nums,target,false)-1;
//判断下边和查找函数是否符合提议
if(leftIdx<=rightIdx&&nums[leftIdx]==target&&rightIdx<nums.length&& nums[rightIdx]==target){
return nums[-1,-1];
}
return nums[leftIdx,rightIdx];
}
public int binarySearch(int [] nums,int target,boolean lower){
int left=0, right= nums.lengrh-1, ans=nums.length;
while(left<=right){
int mid=(right+left)/2
if(nums[mid]>target||(lower&&num >=target)){
right=mid-1;
ans=mid;
}else{
left=mid+1;
}
}
return ans;
}
}
|