需求描述:给定一个按照升序排列的整数数组nums,和一个目标值target。找出给定目标值在数组中的开始位置和结束位置。

如果数组中不存在目标值target,返回[-1,-1];

进阶:你可以设计并实现时间复杂度为O(logn)的算法解决次问题吗?

leetcode 链表题(LeetCode在排序数组中查找元素的第一个和最后一个位置34)(1)

int main() { // int nums[6] = {5,7,7,8,8,10}; int nums[2] = {2,2}; int returnSize = 0; int* res = searchRange(nums, 2, 2, &returnSize); for(int i=0;i<returnSize;i ) { printf("%d ",res[i]); } printf("\n"); return 0; } #pragma mark - 在排序数组中查找元素的第一个和最后一个位置 int* returnDef(int* res,int* returnSize,int number) { res[(*returnSize) ] = number; res[(*returnSize) ] = number; return res; } int binarySearch(int* nums,int target,int i,int j) { while (i <= j) { int m = (i j) / 2; if(nums[m] == target) { return m; }else if (nums[m] < target) { i = m 1; }else { j = m - 1; } } return -1; } int* searchRange(int* nums, int numsSize, int target, int* returnSize) { *returnSize = 0; int* res = (int*)malloc(2000 * sizeof(int)); if(numsSize == 0) return returnDef(res,returnSize,-1); if(numsSize == 1) { if(nums[0] == target) return returnDef(res,returnSize,0); return returnDef(res,returnSize,-1); } if(target > nums[numsSize -1] || target < nums[0]) return returnDef(res,returnSize,-1); //采用二分查找 int i = 0; int j = numsSize - 1; int m = binarySearch(nums,target,i,j); if(m >=0) { *returnSize = 2; int left = m; while (left>=0 && nums[left] ==target) { res[0] = left--; } int right = m; while (right<numsSize && nums[right] == target) { res[1] = right ; } return res; } //m < 0 return returnDef(res,returnSize,-1); }

,