【发布时间】:2019-06-06 07:30:42
【问题描述】:
任务 -- 本代码题的目标是实现二分查找算法。
输入格式 -- 输入的第一行包含一个整数 n 和一个序列 a0
约束 -- 1 ≤ n,k ≤ 10^4; 1 ≤ a[i] ≤ 10^9 对于所有 0 ≤ i
输出格式 -- 对于从 0 到 k-1 的所有 i,输出一个索引 0 ≤ j ≤ n-1 使得 aj = bi 或 -1 如果没有这样的索引。
我正在使用带有 c++11 编译器的代码块。 我已经尝试过压力测试并在我的系统中得到了正确的结果。 但是 coursera autograder 给了我未知的信号 11。 在某些问题中,它会给出未知信号 8。 谁能告诉我这背后的可能原因。
int binary_search(const vector<long long> &a, long long x) {
size_t left = 0, right = (size_t)a.size()-1;
size_t mid = 0;
while(left<=right){
mid = (left+right)/2;
if(x < a[mid]){
right = mid-1;
}
else if(x > a[mid]){
left = mid+1;
}
else return mid;
}
return -1;
}
int main() {
size_t n;
std::cin >> n;
vector<long long> a(n);
for (size_t i = 0; i < a.size(); i++) {
std::cin >> a[i];
}
size_t m;
std::cin >> m;
vector<long long> b(m);
for (size_t i = 0; i < m; ++i) {
std::cin >> b[i];
}
for (size_t i = 0; i < m; ++i) {
//replace with the call to binary_search when implemented
std::cout << binary_search(a, b[i]) << ' ';
}
}
我在自动评分器中得到的实际结果。
Failed case #4/36: unknown signal 11 (Time used: 0.00/1.00, memory used: 40071168/536870912.)
【问题讨论】:
-
我猜不相关,但你为什么使用 long long 来表示小于 109 的值?
-
也许你的意思是 10^9 ?
-
不相关,只是好奇,它是哪个课程?
-
即使是 10⁹ 也适合普通的旧
int(它至少在 32 位平台上运行)。 2¹⁰ ≅ 10³,所以 10⁹ ≅ 2³⁰ 和int在 32 位或更多位平台上可以容纳 -2³¹ … 2³¹-1。 -
@JuniverHazoic 加州大学圣地亚哥分校和国立研究大学高等经济学院的算法工具箱
标签: c++ algorithm c++11 binary-search coursera-api