1、非递归法
int* searchRange(int* nums, int numsSize, int target, int* returnSize){
int *result = (int *)malloc(sizeof(int)*2);
memset(result,-1,sizeof(result));
*returnSize=2;
int left=0,right=numsSize-1,flag=0,ll,rr,mid;
while(left <= right){
mid = left + (right-left)/2;
if(nums[mid]==target){
flag=1;
break;
}else if(nums[mid] > target)
right = mid-1;
else
left = mid+1;
}
if(flag==0)
return result;
ll=rr=mid;
while(ll>0 && nums[ll-1]==target)
ll--;
while(rr<numsSize-1 && nums[rr+1]==target)
rr++;
result[0] = ll;
result[1]= rr;
return result;
}
2、递归法
void FindIndex(int * nums, int left, int right, int * result , int target){
int mid = left + (right-left)/2;
if(left > right)
return;
if(nums[mid]==target){
if(mid < result[0] || result[0]==-1)
result[0] = mid;
if(mid > result[1] || result[0]==-1)
result[1] = mid;
}
if(target <= nums[mid])
FindIndex(nums,left,mid-1,result,target);
if(target >= nums[mid])
FindIndex(nums,mid+1,right,result,target);
}
int* searchRange(int* nums, int numsSize, int target, int* returnSize){
int *result = (int *)malloc(sizeof(int)*2);
memset(result,-1,sizeof(result));
*returnSize=2;
FindIndex(nums,0,numsSize-1,result,target);
return result;
}
哈哈明显第一种更好!