本周题目难度级别‘Medium’
题目:给你一个升序的数组和一个数target,让你返回target在这个数组中的区间,若是没有则返回[-1,-1]
思路:这个没啥好说的,就是遍历找target的区间,直接看代码吧,根据代码注释很好理解:
/**
* 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) {
//开辟空间
int *result = malloc(sizeof(int) * numsSize);
//新数组的下标
int index = 0;
//遍历数组,找出target的位置
for (int i = 0; i < numsSize; i++) {
if (nums[i] == target) {
result[index] = i;
index++;
//因为是升序的数组,所以当大于target的时候就可以停止遍历了
}else if(nums[i] > target) break;
}
//根据上面的注释要求,returnSize是返回数组的长度,都是2,写死就行
*returnSize = 2;
//如果没找到返回【-1,-1】
if (index == 0) {
result[0] = -1;
result[1] = -1;
return result;
//如果只有一个,区间是自己本身
}else if(index == 1){
result[1] = result[0];
return result;
}else {
//返回区间
result[1] = result[--index];
return result;
}
}
效率一般,其实也可以从中间开始找,毕竟是升序的数组,有兴趣的小伙伴可以自己尝试一下。。。
网友评论