返回题解分享
讨论 / 题解分享/ 帖子详情

数的范围 - 题解

#include <iostream> #include <vector> using namespace std;

pair<int, int> findRange(const vector<int>& arr, int target) { int n = arr.size(); int left = -1, right = -1;

// 寻找起始位置
int low = 0, high = n - 1;
while (low <= high) {
    int mid = low + (high - low) / 2;
    if (arr[mid] < target) {
        low = mid + 1;
    } else if (arr[mid] > target) {
        high = mid - 1;
    } else {
        left = mid;
        high = mid - 1; // 继续寻找左边界
    }
}

// 寻找终止位置
low = 0, high = n - 1;
while (low <= high) {
    int mid = low + (high - low) / 2;
    if (arr[mid] < target) {
        low = mid + 1;
    } else if (arr[mid] > target) {
        high = mid - 1;
    } else {
        right = mid;
        low = mid + 1; // 继续寻找右边界
    }
}

return {left, right};


}

int main() { int n, q; cin >> n >> q;

vector<int> arr(n);
for (int i = 0; i < n; ++i) {
    cin >> arr[i];
}

for (int i = 0; i < q; ++i) {
    int target;
    cin >> target;
    pair<int, int> result = findRange(arr, target);
    cout << result.first << " " << result.second << endl;
}

return 0;


}
0 回复 0 转发 0 喜欢 1 阅读
回复 (0)
默认 最新
暂无回复,快来抢沙发!