我已经开始玩 codility 并遇到了这个问题:
给出了一个由 N 个不同整数组成的零索引数组 A。该数组包含 [1..(N + 1)] 范围内的整数,这意味着恰好缺少一个元素。
你的目标是找到那个缺失的元素。
写一个函数:
int solution(int A[], int N);
给定一个零索引数组 A,返回缺失元素的值。
例如,给定数组 A 使得:
A[0] = 2 A[1] = 3 A[2] = 1 A[3] = 5
该函数应返回 4,因为它是缺少的元素。
假使,假设:
N is an integer within the range [0..100,000]; the elements of A are all distinct; each element of array A is an integer within the range [1..(N + 1)].
复杂:
expected worst-case time complexity is O(N); expected worst-case space complexity is O(1), beyond input storage (not counting the storage required for input arguments).
我已经提交了以下解决方案(在 PHP 中):
function solution($A) {
$nr = count($A);
$totalSum = (($nr+1)*($nr+2))/2;
$arrSum = array_sum($A);
return ($totalSum-$arrSum);
}
这给了我 100 分中的 66 分,因为它未能通过涉及大型数组的测试:“large_range 范围序列,长度 = ~100,000”,结果为:RUNTIME ERROR 测试程序意外终止 stdout:无效的结果类型,预期为 int。
我用 100.000 个元素的数组在本地进行了测试,它没有任何问题。那么,我的代码似乎有什么问题,以及 codility 使用什么样的测试用例来返回“无效的结果类型,预期的 int”?