Search for a Range

来源:互联网 发布:靠谱的网络兼职有哪些 编辑:程序博客网 时间:2024/05/03 08:25

题目大意:给定一个排好序的序列,和一个数字,求这个序列等于给定数字的位置范围。

解题思路:二分查找,分别求等于给定数字最靠左的位置和最靠右的位置。


class Solution {public:    vector<int> searchRange(int A[], int n, int target) {        int left = searcheRangeAssist(A, 0, n - 1, target, true);        int right = searcheRangeAssist(A, 0, n - 1, target, false);        vector<int> result;        result.push_back(left);        result.push_back(right);        return result;    }private:    int searcheRangeAssist(int A[], int low, int high, int target, bool isLeft) {        while(low <= high) {            int mid = (low + high) >> 1;            if(target == A[mid]) {                int temp = -1;                if(isLeft) {                    if(mid > low && A[mid] == A[mid - 1]) {                        temp = searcheRangeAssist(A, low, mid - 1, target, isLeft);                    }                } else {                    if(mid < high && A[mid] == A[mid + 1]) {                        temp = searcheRangeAssist(A, mid + 1, high, target, isLeft);                    }                }                return temp == -1 ? mid : temp;            } else if(target > A[mid]) {                low = mid + 1;            } else {                high = mid - 1;            }        }        return -1;    }};


0 0