从 Codility 中找到给定排列中缺失元素的算法的思考过程
Thinking Process of an algorithm of find the missing element in a given permutation from Codility
我找到了 Codility's PermMissingElem Question 的完美答案。
function solution($A) {
$N = count($A);
$sum = ($N + 2) * ($N + 1) / 2;
for($i = 0; $i < $N; $i++){
$sum -= $A[$i];
}
return intval($sum);
}
然而,我发现它对$sum 的功能感到困惑。这是什么功能?非常正确,但是,怎么会有人编出这样的函数呢? 有没有人能以某种方式对思维过程进行逆向工程?
我很想知道它是怎么来的过程
谢谢!
1到N的整数之和可以用这个公式计算:
N(N+1)/2
基本上,您取第一个数字和最后一个数字并将它们相加,然后是第二个数字和倒数第二个数字..等等
例如:
1 到 100 的总和:
(1+100) + (2+99) + (3+98) + (4+97) ...
= (100/2)(101)
= 50 x 101
这里有一个很好的解释:
我找到了 Codility's PermMissingElem Question 的完美答案。
function solution($A) {
$N = count($A);
$sum = ($N + 2) * ($N + 1) / 2;
for($i = 0; $i < $N; $i++){
$sum -= $A[$i];
}
return intval($sum);
}
然而,我发现它对$sum 的功能感到困惑。这是什么功能?非常正确,但是,怎么会有人编出这样的函数呢? 有没有人能以某种方式对思维过程进行逆向工程? 我很想知道它是怎么来的过程
谢谢!
1到N的整数之和可以用这个公式计算:
N(N+1)/2
基本上,您取第一个数字和最后一个数字并将它们相加,然后是第二个数字和倒数第二个数字..等等
例如:
1 到 100 的总和:
(1+100) + (2+99) + (3+98) + (4+97) ...
= (100/2)(101)
= 50 x 101
这里有一个很好的解释: