题目:
进阶:
示例1:
示例2:
示例3:
提示:
解题代码:
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int binarySearch(int* nums, int left, int right, int target){
if(left > right)
return -1;
int mid = (left + right) / 2;
if(nums[mid] == target)
return mid;
else if(nums[mid] > target)
return binarySearch(nums, left, mid - 1, target);
else
return binarySearch(nums, mid + 1, right ,target);
return -1;
}
int* searchRange(int* nums, int numsSize, int target, int* returnSize){
*returnSize = 2;
int* retNums = (int*)malloc(2 * sizeof(int));
retNums[0] = -1;
retNums[1] = -1;
// 二分查找法找到target在数组中的位置
int index = binarySearch(nums, 0, numsSize - 1, target);
if(index == -1)
return retNums;
// 找到左边界
if(index > 0)
while(index > 0 && nums[index] == nums[index-1])
index--;
retNums[0] = index;
// 找到右边界
if(index < numsSize - 1)
while(index < numsSize - 1 && nums[index] == nums[index+1])
index++;
retNums[1] = index;
return retNums;
}