给定一个包含 n 个整数的排序数组,找出给定目标值 target 的起始和结束位置。
如果目标值不在数组中,则返回[-1, -1]
样例
给出[5, 7, 7, 8, 8, 10]
和目标值target=8
,
返回[3, 4]
通过找出target的左边界(详解见[LintCode] First Position Of Target),利用相同的思路找出target右边界即可。代码如下:
class Solution { public: /* * @param A: an integer sorted array * @param target: an integer to be inserted * @return: a list of length 2, [index1, index2] */ vector<int> searchRange(vector<int> &A, int target) { // write your code here if (A.empty()) return {-1, -1}; int lower = 0, upper = 0, mid = 0; int left = 0, right = A.size() - 1; while (left <= right) { mid = left + (right - left) / 2; if (A[mid] < target) left = mid + 1; else right = mid - 1; } lower = left; left = 0, right = A.size() - 1; while (left <= right) { mid = left + (right - left) / 2; if (A[mid] > target) right = mid - 1; else left = mid + 1; } upper = right; if (lower <= upper) return {lower, upper}; else return {-1, -1}; } }; // 816 ms