Я задавал вопрос о массивах в InterviewBit. В этом вопросе я сделал встроенную функцию, возвращающую абсолютное значение целого числа. Но мне сказали, что мой алгоритм неэффективен при его представлении. Но когда я перешел на использование abs()
из библиотеки С++, он дал правильный вердикт ответа.
Вот моя функция, получившая неэффективный вердикт -
inline int abs(int x){return x>0 ? x : -x;}
int Solution::coverPoints(vector<int> &X, vector<int> &Y) {
int l = X.size();
int i = 0;
int ans = 0;
while (i<l-1){
ans = ans + max(abs(X[i]-X[i+1]), abs(Y[i]-Y[i+1]));
i++;
}
return ans;
}
Вот тот, который получил правильный ответ -
int Solution::coverPoints(vector<int> &X, vector<int> &Y) {
int l = X.size();
int i = 0;
int ans = 0;
while (i<l-1){
ans = ans + max(abs(X[i]-X[i+1]), abs(Y[i]-Y[i+1]));
i++;
}
return ans;
}
Почему это произошло, поскольку я думал, что встроенные функции выполняются быстрее всего, поскольку вызов не выполняется? Или сайт имеет ошибку? И если сайт правильный, то что использует С++ abs()
, что быстрее, чем inline abs()
?