我使用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 follow,则会产生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的数据类型..
THX。
答案 0 :(得分:0)
将n存储在int中。因此,当你对它进行平方时,你仍然有一个int。然后你将这个int分配给一个很长的总和,但由于溢出已经发生,所以太晚了。
答案 1 :(得分:0)
这是100%的javascript解决方案:
function solution(A) {
if (!A.length) return 1;
let n = A.length + 1;
return (n + (n * n - n) / 2) - A.reduce((a, b) => a + b);
}
如果给定数组为空,则返回1,这是空数组中缺少的元素。
接下来,假设序列中的第一个元素始终为1,我们将计算“常规”序列之和。然后,找到给定数组与完整序列之间的差,然后将其返回。这是缺少的元素。
我在这里使用的数学函数是序列和,以及最后一个元素: