题目:34. 在排序数组中查找元素的第一个和最后一个位置
力扣
给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。
如果数组中不存在目标值 target,返回 [-1, -1]。
解答:
方法一:直观的思路肯定是从前往后遍历一遍。用两个变量记录第一次和最后一次遇见的下标,但这个方法的时间复杂度为 O(n^2),没有利用到数组升序排列的条件。
int* searchRange(int* nums, int numsSize, int target, int* returnSize)
{
// 开辟两个int大小的空间放索引
int* res = (int*)malloc(sizeof(int) * 2);
// 判断是否找到target
int flag = 0;
int i = 0;
while (i < numsSize)
{
// 找到target,flag置1
if (nums[i] == target)
{
flag = 1;
break;
}
i++;
}
// 没找到target,返回[-1,-1]
if (flag == 0)
{
res[0] = -1;
res[1] = -1;
*returnSize=2;
return res;
}
// 程序走到这里,一定存在索引
// 先记录第一个索引位置
res[0] = i;
// 寻找结束位置
while (i < numsSize && nums[i] == target)
{
i++;
}
// 再记录结束索引位置
res[1] = i - 1;
*returnSize=2;
return res;