leetcode-剑指53-I
language: C
与主站34 基本一样
address
// 先用二分法找到第一个,如果找不到,返回0个,找得到,再以此为起点左右计算数量
int search(int* nums, int numsSize, int target){
int low = 0,high = numsSize-1, count = 0,mid;
while(low<=high){
mid =(low +high)/2;
if(nums[mid]==target){
count++;
break;
}else if(nums[mid]>target){
high = mid-1;
}else{
low = mid +1;
}
}
if(count == 0)
return 0;
low = mid+1; //
mid--;
while((mid>=0)&&(nums[mid]==target)){
count++;
mid--;
}
while((low<numsSize)&&(nums[low]==target)){
count++;
low++;
}
return count;
}
// 主站34的代码
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int* searchRange(int* nums, int numsSize, int target, int* returnSize){
returnSize[0] = 2;
int *ans = (int *) malloc(sizeof(int)*2);
int low = 0,high = numsSize-1, count = 0,mid;
while(low<=high){
mid =(low +high)/2;
if(nums[mid]==target){
count++;
break;
}else if(nums[mid]>target){
high = mid-1;
}else{
low = mid +1;
}
}
if(count == 0){
ans[0] = -1;
ans[1] =-1;
return ans;
}
low = mid+1; //
mid--;
while((mid>=0)&&(nums[mid]==target)){
mid--;
}
ans[0] = mid +1;
while((low<numsSize)&&(nums[low]==target)){
low++;
}
ans[1] = low-1;
return ans;
}