题目描述:
思路:
当看到这道题的时候我的第一思路是通过for循环来遍历数组对target进行寻找,定义一个int* 类型的ret数组,定义n和m,n和m的值即是ret数组的返回值。当找到在数组中找到target的时候返回n,m的值
实现:
我先考虑了数组中只有一个数的情况,当只有一个数的时候,先确定是不是target如果是的话,ret[0] = 0,ret[1] = 0;否则值均为-1。
如果不是只有一个数,对数组进行遍历,先找到ret[0]的值,也就是n的值,当找到n的时候,记录当前位置,同时结束循环。
之后再次遍历数组,找到ret[1]的值,也就是m
代码:
int* searchRange(int* nums, int numsSize, int target, int* returnSize) {
int i = 0, n = -1, m = -1;//n,m为ret数组的值,默认为-1
*returnSize = 2;//不要忘记返回这行,这个是输出的数组ret的长度
int* ret = (int *)malloc(sizeof(int) * 2);//ret为要返回的数组
if(numsSize == 1){//当数组中只有一个值的时候,进行判断
if(nums[0] != target){//数组中的值不是目标值
ret[0] = -1;
ret[1] = -1;
return ret;
}else{//数组中的值是目标值
ret[0] = 0;
ret[1] = 0;
return ret;
}
}
for (i = 0; i < numsSize; i++) {//找n的值
if (nums[i] == target) {
n = i;
break;
}
}
if(n != -1){//当n不等于-1时,寻找m的值
for (i = numsSize -1; i >= n; i--) {
if (nums[i] <= target) {
m = i;
break;
}
}
}
printf("n = %d,m = %d\n",n,m);
ret[0] = n;
ret[1] = m;
return ret;
}
int main() {
int arr[] = { 2, 5, 8,8,8,8 ,12, 16, 23, 38, 56, 72, 91 };
int n = sizeof(arr) / sizeof(arr[0]);
int target = 8;
int returnSize = 0;
printf("n = %d\n", n);
int* test = searchRange(arr, n, 8,&returnSize);
int m = sizeof(test) / sizeof(int);
printf("test[0] = %d,test[1] = %d\n", test[0],test[1]);
return 0;
}