我在一些在线代码测验网站中,存在一个复杂性限制,即代码在时间和内存中不应超过 O(N),其中 N 是向量A
的大小。我的代码完全是(完整代码):
int foo(int X, const std::vector<int> &A) {
auto N = A.size();
auto total_hit = std::count(A.cbegin(), A.cend(), X);
auto K = N - total_hit;
if (K < 0 || K >= N){
return -1;
}
return K;
}
我得到的结果是我超过了时间复杂度。有没有可能而不是错?
答案 0 :(得分:9)
根据ref:
他们错了!复杂性:完全是最后的 - 谓词的第一次比较/应用
cplusplus同意:
复杂性:第一个和最后一个距离的线性:每个元素比较一次。
当然,std::cbegin(),std::cend()和std::vector::size()的复杂性常数。
如果我是你,我会联系该网站,将他们链接到这个问题。