/**
* Return an array of size *returnSize.
* Note: The returned array must be malloced, assume caller calls free().
*/
int bsearchLeft(int array[],int low,int high,int target)
{
while(low<=high)
{
int mid=(low+high)/2;
if(array[mid]>target || array[mid]==target && array[mid-1]==target)
high=mid-1;
else if(array[mid]<target)
low=mid+1;
else
return mid;
}
return-1;
}
int bsearchRight(int array[],int low,int high,int target)
{
while(low<=high)
{
int mid=(low+high)/2;
if(array[mid]>target)
high=mid-1;
else if(array[mid]<target || array[mid]==target && array[mid+1]==target)
low=mid+1;
else
return mid;
}
return-1;
}
int* searchRange(int* nums, int numsSize, int target, int* returnSize) {
int l, r, i;
int *res = (int*)malloc(sizeof(int) * numsSize);
*returnSize = 2;
if(numsSize == 0 || nums[0] > target || nums[numsSize-1] < target){
res[0] = -1;
res[1] = -1;
return res;
}
if(nums[0] == target){
l = 0;
r = bsearchRight(nums,0,numsSize-1,target);
}
else if(nums[numsSize-1] == target){
l = bsearchLeft(nums,0,numsSize-1,target);
r = numsSize - 1;
}
else{
l = bsearchLeft(nums,0,numsSize-1,target);
r = bsearchRight(nums,0,numsSize-1,target);
}
res[0] = l;
res[1] = r;
return res;
}
* Return an array of size *returnSize.
* Note: The returned array must be malloced, assume caller calls free().
*/
int bsearchLeft(int array[],int low,int high,int target)
{
while(low<=high)
{
int mid=(low+high)/2;
if(array[mid]>target || array[mid]==target && array[mid-1]==target)
high=mid-1;
else if(array[mid]<target)
low=mid+1;
else
return mid;
}
return-1;
}
int bsearchRight(int array[],int low,int high,int target)
{
while(low<=high)
{
int mid=(low+high)/2;
if(array[mid]>target)
high=mid-1;
else if(array[mid]<target || array[mid]==target && array[mid+1]==target)
low=mid+1;
else
return mid;
}
return-1;
}
int* searchRange(int* nums, int numsSize, int target, int* returnSize) {
int l, r, i;
int *res = (int*)malloc(sizeof(int) * numsSize);
*returnSize = 2;
if(numsSize == 0 || nums[0] > target || nums[numsSize-1] < target){
res[0] = -1;
res[1] = -1;
return res;
}
if(nums[0] == target){
l = 0;
r = bsearchRight(nums,0,numsSize-1,target);
}
else if(nums[numsSize-1] == target){
l = bsearchLeft(nums,0,numsSize-1,target);
r = numsSize - 1;
}
else{
l = bsearchLeft(nums,0,numsSize-1,target);
r = bsearchRight(nums,0,numsSize-1,target);
}
res[0] = l;
res[1] = r;
return res;
}