用C语言(非C++)在做此题:
前几个示例也能过,但是当输入为 [1] 1时就过不了,报heap buffer overflow错误,用VS2019测试正常
```c
int* searchRange(int* nums, int numsSize, int target, int* returnSize) {
int low = 0, high = numsSize - 1;
int pivot = (low+high)/2;
// if (target < nums[low] || target > nums[high]) {
// low = -1;
// high = -1;
// }
//二分查找
while (low <= high && nums[pivot] != target) {
pivot = (low + high) / 2;
if (target < nums[pivot] && low <= high) {
high = pivot - 1;
}
else if (target > nums[pivot] && low <= high) {
low = pivot + 1;
}
}
if (low > high) {
low = -1;
high = -1;
}
//前后查找起始位置
else {
low = pivot;
high = pivot;
while (nums[low] == target && low >= 0) low--;
while (nums[high] == target && high <= numsSize-1) high++;
low++;high--;
//printf("%d,%d", ++low, --high);
}
//赋值returnSize
*returnSize = 2;
int *p = malloc(sizeof(int)*2);
p[0]= low;
p[1]= high;
return p;
}
```
while (nums[low] == target && low >= 0)这里,把 low>=0放在前面
while (low >= 0 && nums[low] == target )
while (nums[high] == target && high <= numsSize-1)这里,把high <= numsSize-1放在前面
while (high <= numsSize-1 && nums[high] == target )
因为&&运算,先执行左边的,再执行&&右边的,当low >= 0的时候,原来的代码在执行 nums[low] == target 的时候,就已经越界了。high <= numsSize-1 这里也是同样的道理
输入为 [1] 1时就过不了
到底输入的是啥,分别代码啥意思呢?怎么输入还带中括号?
是表示只输入一个数组元素吗?
具体说说错误情况时,你到底数组输入了哪些数据,又搜索哪个值呢?