[LintCode] Search For A Range

给定一个包含 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
原文地址:https://www.cnblogs.com/immjc/p/7989097.html