第1题可以参考教材280页到282页的算法练习题7.2,只是算法描述中的参数名称和题目的名称有一点变化。做题时一些填空记得按题目中的参数为准调整就行,不能直接按书本的。采用折半查找算法在排序数组中查找元素的第一个位置和最后一个位置,根据下列问题描述和输入输出示例,在横线处填写相应代码。【问题描述】:给定一个按照非递减顺序排列的整数数组nums和一个目标值target,请找出目标值在数组中的开始位置和结束位置,如果数组中不存在target,返回[-1,1]。
【输入输出示例】:
输入:nums=[5,7,7,8,8,10],target=8
输出:[3,4]
【算法描述】:
int binarySearch(int* nums,int numsSize,int target,bool lower){
//折半查找,返回nums数组中折半查找目标值的位置
int low=0,high=numsSize-1,ans=numsSize;
while(low<=high){
int mid= (1) ;
if(nums[mid]>target||(lower&&nums[mid]>=target){
//返回数组中第一个等于目标值的位置或第一个大于目标值的位置
high= (2) ;
ans=mid;
}//if
else (3) ;
}//while
return ans;
}
int* searchRange(int* nums,int numsSize,int target,int* returnSize){
//查找给定目标值在数组中的第一个位置和最后一个位置
int lowIdx=binarySearch(nums,numsSize,target,true);
int highIdx= (4) ;
int* ret=new int[sizeof(int)*2];
*returnSize=2; //返回数组ret的元素个数为2
if(lowIdx<=highIdx&&highIdx<numsSize&&nums[lowIdx]==target&&nums
[highIdx]==target){
//存在目标值且num数组中lowIdx和highIdx的位置所存元素均为目标值
ret[0]=lowIdx,ret[1]=highIdx;
(5) ;
}
ret[0]=-1,ret[1]=-1;
return ret;
}