万事开头难
关于寻找左边界的图解
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int getLeftBorder();
int getRightBorder();
int* searchRange(int* nums, int numsSize, int target, int* returnSize){
*returnSize = 2;
int *ra = (int *)malloc(sizeof(int) * 2);
int LeftBorder = getLeftBorder(nums,numsSize,target);
int RightBorder = getRightBorder(nums,numsSize,target);
if(LeftBorder > RightBorder)
{
ra[0] = ra[1] = -1;
return ra;
}
ra[0] = LeftBorder;
ra[1] = RightBorder;
return ra;
}
int getLeftBorder(int *nums,int numsSize ,int target){
int left = 0;
int right = numsSize - 1;
while(left <= right){ //区间为左闭右闭
int mid = left + (right - left) / 2; //防溢出
if(nums[mid] >= target)
right = mid -1;
else
left = mid +1;
}
return left;
}
int getRightBorder(int *nums,int numsSize,int target){
int left = 0;
int right = numsSize - 1;
while(left <= right){ //区间为左闭右闭
int mid = left + (right - left) / 2; //防溢出
if(nums[mid] <= target)
left = mid +1;
else
right = mid -1;
}
return right;
}