Title:
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).
If the target is not found in the array, return [-1, -1]
.
For example,
Given[5, 7, 7, 8, 8, 10]
and target value 8, return [3, 4]
. 这道题给定一个排序好的数组,然后找到重复的数字,并输出序号即可。
该题的要求是时间复杂度为O(log n),也就是说不能采用从头遍历到尾的方法,容易超时。因此采用另一种做法,从两边同时向中间靠拢。由于是排序好的数组,因此判断逻辑较为简单。
Solution:
int* searchRange(int* nums, int numsSize, int target, int* returnSize) { int *result=(int*)malloc(sizeof(int)*2); int i,j; int tmp; if (numsSize<=0) { *returnSize=2; result[0]=-1; result[1]=-1; return result; } if (numsSize==1) { if (target==nums[0]) { *returnSize=2; result[0]=0; result[1]=0; return result; } else { *returnSize=2; result[0]=-1; result[1]=-1; return result; } } i=0; j=numsSize-1; while(inums[j]){ *returnSize=2; result[0]=-1; result[1]=-1; return result; } else if (target==nums[i]) { tmp=i+1; while(tmp =0 && nums[tmp]==nums[j]) { tmp--; } *returnSize=2; result[0]=tmp+1; result[1]=j; return result; } else { if (i+1==j-1) i++; else { i++; j--; } } } *returnSize=2; result[0]=-1; result[1]=-1; return result;}