代码实现:
/** * Note: The returned array must be malloced, assume caller calls free(). */ int binarySearch(int *nums, int numsSize, int target) { int l = 0, r = numsSize - 1; while (l <= r) { int mid = (l + r) >> 1; if (nums[mid] == target) { return mid; } else if (nums[mid] > target) { r = mid - 1; } else if (nums[mid] < target) { l = mid + 1; } } return -1; } int* searchRange(int *nums, int numsSize, int target, int *returnSize) { int *res = malloc(sizeof(int) * 2); memset(res, -1, sizeof(int) * 2); *returnSize = 2; if (nums == NULL || numsSize < 1) { return res; } int ind = binarySearch(nums, numsSize, target); if (ind == -1) { return res; } int i, j; for (i = ind - 1; i >= 0; i--) { if (nums[i] != target) { break; } } res[0] = i + 1; for (j = ind + 1; j < numsSize; j++) { if (nums[j] != target) { break; } } res[1] = j - 1; return res; }