【发布时间】:2016-09-28 18:22:38
【问题描述】:
我使用 C++ 来解决问题,代码 PermMissingElem。
我没有使用xor,只是序列的总和。
c++
int solution(vector<int> &A) {
// write your code in C++11 (g++ 4.8.2)
int n = A.size();
long long sum = ((n+1)*(n+2))/2;
for(int i=0; i<n; i++) {
sum -= A[i];
}
return (int)sum;
}
它导致 80% 的测试分数未能通过大型测试 = ~100000
错误答案示例,
得到 -2147483647 预期 1
但是,如果使用java跟随,结果是100%。
java
public int solution(int[] A) {
long N = A.length + 1;
long total = N * (N + 1) / 2;
for (int i : A) {
total -= i;
}
return (int)total;
}
c++和java有什么区别? 我使用的数据类型为 sum, long, long long, long long int ..
谢谢。
【问题讨论】:
-
你为什么返回一个 long long 作为 int?如果它大于 int 的可能值怎么办?
-
也许编译成 64 位可能会有所帮助
-
sum = ((n+1)*(n+2))/2是否应该等同于total = N * (N + 1) / 2? -
另外,您可以使用
for (const auto& e : A)作为循环来代替 -
@Link 因为 n 的大小可能是 100,000,所以我认为 long long 可以覆盖 n*n 的值。我认为 codility 错误消息意味着溢出.. 但我不能完全理解
标签: c++ int max permutation long-integer