贴原题:
Given an array of integers sorted in ascending order, find the starting and ending position of a given target value.
Your algorithm’s runtime complexity must be in the order of O(log n).
For example,
Given [5, 7, 7, 8, 8, 10] and target value 8,
return [3, 4].
解析:
本题是给出一个数组以及一个目标数,让查询目标数在数组中的起始位置,如果数组中不存在目标数,则返回[-1, -1]。
只需要设置一个标志位即可,已经开始则把标志置一。标志置一之后,则需要查询其结束位置。
贴C代码:
/**
* Return an array of size *returnSize.
* Note: The returned array must be malloced, assume caller calls free().
*/
int* searchRange(int* nums, int numsSize, int target, int* returnSize) {
*returnSize=2;
int *x=(int *)malloc(2*sizeof(int));
*x=-1;//先赋值-1,-1
*(x+1)=-1;
int flag=0;//已经开始标志
for(int i=0; i<numsSize; i++)
{
if(*(nums+i)==target && !flag)//查询目标值开始位置
{
*x=i;
flag=1;//开始则置一
}
if(flag && *(nums+i)==target && (i==numsSize-1 || i<numsSize-1 && *(nums+i+1)>target))//查询目标值结束位置
{
*(x+1)=i;
break;
}
}
return x;
}