lintcode 搜索区间

给定一个包含 n 个整数的排序数组,找出给定目标值 target 的起始和结束位置。
如果目标值不在数组中,则返回[-1, -1]
样例
给出[5, 7, 7, 8, 8, 10]和目标值target=8,
返回[3, 4]
题目链接:http://www.lintcode.com/zh-cn/problem/search-for-a-range/
通过二分查找找到起始位置和结束位置,一定要考虑到数组为空的情况,不然A[i-1]会产生runtime error

class Solution {
    /** 
     *@param A : an integer sorted array
     *@param target :  an integer to be inserted
     *return : a list of length 2, [index1, index2]
     */
public:
    vector<int> searchRange(vector<int> &A, int target) {
        // write your code here
        vector<int> res = {-1,-1};
        if (A.empty()) return res;
        int i = 0,j = A.size();
        while (i < j) {
            int mid = (i + j) / 2;
            if (A[mid] >= target) j = mid;
            else i = mid + 1;
        }
        if (A[j] == target) res[0] = j;
        i = 0,j = A.size();
        while (i < j) {
            int mid = (i + j) / 2;
            if (A[mid] > target) j = mid;
            else i = mid + 1;
        }
        if (A[i - 1] == target) res[1] = i - 1;
        return res;
    }
};    
    原文作者:yzawyx0220
    原文地址: https://www.jianshu.com/p/55184a989ad6
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞