Search for a Range
Given a sorted array of integers, find the starting and ending position of a given target value.
Your algorithm's runtime complexity must be in the order of O(log n).
If the target is not found in the array, return
[-1, -1]
.For example,
Given
[5, 7, 7, 8, 8, 10]
and target value 8,return
[3, 4]
.直觀就是直接找一次就好
一開始寫玩都不會對
搞半天
*returnSize 要給2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | int* searchRange(int* nums, int numsSize, int target, int* returnSize) { *returnSize = 2; int *ans = (int *)malloc(sizeof(int) * *returnSize); ans[0]=-1; ans[1]=-1; if(numsSize == 0)return ans; if(target < nums[0] || target > nums[numsSize-1])return ans; for(int i=0;i<numsSize;i++){ if(target == nums[i]){ if(ans[0]==-1){ ans[0]=i; ans[1]=i; } else ans[1]=i; } if(target<nums[i])break; } return ans; } |
如果要更快可以改用binary search
因為都排序好了
會兩倍快
沒有留言:
張貼留言