[Leetcode] Search for a Range

来源:互联网 发布:古墓丽影9a卡优化补丁 编辑:程序博客网 时间:2024/04/29 08:31
class Solution {public:    vector<int> searchRange(int a[], int n, int target) {        // Start typing your C/C++ solution below        // DO NOT write int main() function        vector<int> res(2);                res[0] = findLeft(a, n, target);        res[1] = findRight(a, n, target);                return res;    }        int findLeft(int a[], int n, int target)    {        int left = 0;        int right = n;                while (left <= right)        {            int mid = left + (right - left) / 2;            if (getVal(a, n, mid) == target && getVal(a, n, mid - 1) < target)                return mid;            else if (getVal(a, n, mid) >= target)                right = mid - 1;            else                left = mid + 1;        }                return -1;    }        int findRight(int a[], int n, int target)    {        int left = -1;        int right = n - 1;                while (left <= right)        {            int mid = left + (right - left) / 2;            if (getVal(a, n, mid) == target && getVal(a, n, mid + 1) > target)                return mid;            else if (getVal(a, n,  mid) > target)                right = mid - 1;            else                left = mid + 1;        }                return -1;    }        int getVal(int a[], int n, int idx)    {        if (idx == -1)            return INT_MIN;        else if (idx == n)            return INT_MAX;        else            return a[idx];    }};

原创粉丝点击