笨办法,先找第一个等于target的位置,再找最后一个等于target的位置
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int* searchRange(int* nums, int numsSize, int target, int* returnSize){
*returnSize=2;
int *ret=malloc(2*4);
int lo=0,hi=numsSize-1;
int pre;
pre=prefind(nums,target,lo,hi);
int post;
post=postfind(nums,target,lo,hi,numsSize);
ret[0]=pre;
ret[1]=post;
return ret;
}
int prefind(int *nums,int target,int low,int high){
while(low<=high){
int mid=low+(high-low)/2;
if(nums[mid]<target){
low=mid+1;
}else if(nums[mid]>target){
high=mid-1;
}else{
if((mid==0)||(nums[mid-1]!=target))return mid;
else high=mid-1;
}
}
return -1;
}
int postfind(int *nums,int target,int low,int high,int numsSize){
while(low<=high){
int mid=low+(high-low)/2;
if(nums[mid]<target){
low=mid+1;
}else if(nums[mid]>target){
high=mid-1;
}else{
if((mid==numsSize-1)||(nums[mid+1]!=target))return mid;
else low=mid+1;
}
}
return -1;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)