我做了演示codility測試 「NumberOfDiscIntersections」: https://codility.com/programmers/lessons/4算術溢出
我有:PERF = 100%,正確性87%
所有的測試,但一個都很好:
overflow
arithmetic overflow tests
爲什麼我的漫長,不夠?我無法確定哪裏出了問題!
#include <algorithm>
int solution(const vector<int> &A)
{
// write your code in C++11
vector<long long > vec_max;
for(int i = 0; i < A.size(); ++i)
{
vec_max.push_back(A[i] + i);
}
std::sort(vec_max.begin(),vec_max.end()); // sort by max
int step = 1;
int counter = 0;
for(int i = A.size() - 1; i > -1; --i)
{
std::vector<long long>::iterator low;
int nb_upper = A.size() - (lower_bound(vec_max.begin(),vec_max.end(), (long long) (i - A[i])) - vec_max.begin());
counter += nb_upper - step;
++step;
}
if (counter > 10000000)
{
return -1;
}
else
{
return counter;
}
}
你還有一些'int'變量。你確定沒有一個會溢出嗎? –
循環向下的替代方法:'for(auto i = A.size(); i!= 0;){--i; ...}並考慮@ n-m的評論。 – Tobias