前言
`
题目:给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。
如果数组中不存在目标值 target,返回 [-1, -1]。
一、示例
二、思路和代码
1.思路
①当数组没有与target相同的元素,则返回[-1, -1]
②当数组与target有一个相同的元素,则返回相同的元素的位置i。[i, i]
③当数组与target有两个相同的元素,则返回第一个相同的元素的位置i。[i, i+1]
④当数组与target有两个以上相同的元素,则返回第一个相同的元素的位置i。[i, i + sum - 1]
2.代码
代码如下(示例):
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int Find_First_Num(int* nums, int numsSize, int target) {
int i;
for(i = 0; i < numsSize; i++) {
if(nums[i] == target) {
break;
}
}
return i;
}
int* searchRange(int* nums, int numsSize, int target, int* returnSize){
int* arr = (int*)malloc(sizeof(int) * 3);
int i, j = 0, sum = 0; //sum用来记录有多少个相同的
arr[0] = '\0';
*returnSize = 2;
if(nums == NULL) {
goto cmd_fail;
}
for(i = 0; i < numsSize; i++) {
if(nums[i] == target) {
++sum;
}
}
if( 0 == sum ) {
goto cmd_fail;
} else if(1 == sum) {
arr[0] = Find_First_Num(nums, numsSize, target);
arr[1] = arr[0];
} else if(2 == sum) {
arr[0] = Find_First_Num(nums, numsSize, target);
arr[1] = arr[0] + 1;
} else {
arr[0] = Find_First_Num(nums, numsSize, target);
arr[1] = arr[0] + sum - 1;
}
return arr;
cmd_fail:
arr[0] = -1;
arr[1] = -1;
return arr;
}
结果如图所示: