在排序数组中查找元素的第一个和最后一个位置_leetcode_34
题目描述:给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值 target,返回 [-1, -1]。
分析:升序数组,可以用二分查找定位目标元素,然后左右跳动指针确定范围;
代码:
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
//以上注释说明我们返回的数组需要自己用malloced函数创建;
int* searchRange(int* nums, int numsSize, int target, int* returnSize){
int* array = malloc(2 * sizeof(int)); //创建int类型数组
*returnSize=2; //returnSize赋值为2
if(numsSize==0){
array[0]=-1;
array[1]=-1;
}else if(nums[0]==target && nums[numsSize-1]==target){
array[0]=0;
array[1]=numsSize-1;
}else{
int Head=0;
int Tail=numsSize-1;
int Mid;
while(Head<=Tail){
if(nums[Head]==target){
while(Head-1>=0){
if(nums[Head-1]==target){
Head--;
}else{
break;
}
}array[0]=Head;
while(nums[Head+1]==target){
Head++;
}
array[1]=Head;
break;
}else if(nums[Tail]==target){
while(Tail+1<=numsSize-1){
if(nums[Tail+1]==target){
Tail++;
}else{
break;
}
}array[1]=Tail;
while(nums[Tail-1]==target){
Tail--;
}
array[0]=Tail;
break;
}else{
Mid=(Head+Tail)/2;
if(nums[Mid]<=target){
Head=Mid;
Tail--;
}else{
Tail=Mid;
Head++;
}
}
}if(Head>Tail){
array[0]=-1;
array[1]=-1;
}
}
return array;
}
执行用时: 12 ms
内存消耗: 7.5 MB
浙公网安备 33010602011771号