D2uae 二分查找3用c++解决以下问题时间限制:50s 内存限制:2560MB 代码提交间隔:3分钟现在可以提交 问题描述 给定一个长为N的严格升序序列aa0 a1 aN-1。有M个询问每个询问有一个参数x求最小的i0=iN使aix若不存在则为-1。输入格式 输入共N+M+1行。 第一行两个整数NM。 接下来N行每行一个数表示给定序列。 接下来M行每行一个数表示询问参数。
下面是用C++解决该问题的代码:
#include <iostream>
#include <vector>
using namespace std;
int binarySearch(vector<int>& nums, int target) {
int left = 0;
int right = nums.size() - 1;
int ans = -1;
while (left <= right) {
int mid = left + (right - left) / 2;
if (nums[mid] > target) {
ans = mid;
right = mid - 1;
} else {
left = mid + 1;
}
}
return ans;
}
int main() {
int N, M;
cin >> N >> M;
vector<int> nums(N);
for (int i = 0; i < N; i++) {
cin >> nums[i];
}
for (int i = 0; i < M; i++) {
int x;
cin >> x;
int result = binarySearch(nums, x);
cout << result << endl;
}
return 0;
}
该代码首先定义了一个二分查找函数binarySearch,该函数接受一个严格升序的序列nums和一个目标值target,返回最小的满足nums[i] > target的索引i,若不存在则返回-1。
然后在主函数中,首先读入输入的N和M,然后创建一个长度为N的向量nums,用于存储给定序列。接下来使用循环读入N个数,将其存入nums中。接着使用循环读入M个询问参数,并调用二分查找函数进行查找,并将结果输出。
最后,返回0表示程序正常结束
原文地址: http://www.cveoy.top/t/topic/iLpk 著作权归作者所有。请勿转载和采集!