[LeetCode] Search for a Range

来源:互联网 发布:传奇永恒网络传输异常 编辑:程序博客网 时间:2024/04/29 13:02
class Solution {public:    int find_left(int A[], int s, int t, int target) {        int l = s;        int r = t;                while (l <= r) {            int p = (l + r) / 2;            if (A[p] < target)                l = p + 1;            else                r = p - 1;        }                return l;    }        int find_right(int A[], int s, int t, int target) {        int l = s;        int r = t;                while (l <= r) {            int p = (l + r) / 2;            if (A[p] > target)                r = p - 1;            else                l = p + 1;        }                return r;    }        vector<int> searchRange(int A[], int n, int target) {        // Start typing your C/C++ solution below        // DO NOT write int main() function        vector<int> ret;                int s = 0;        int t = n - 1;                while (s <= t) {            int p = (s + t) / 2;                        if (A[p] == target) {                int l = find_left(A, s, p, target);                int r = find_right(A, p, t, target);                ret.push_back(l);                ret.push_back(r);                                return ret;            } else if (A[p] < target) {                s = p + 1;            } else {                t = p - 1;            }        }                ret.push_back(-1);        ret.push_back(-1);                return ret;    }};


Small Case: 12ms

Large Case: 64ms


Time: O(lgn)

Space: O(1)

原创粉丝点击