从 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

这里有一个很好的解释:

http://www.wikihow.com/Sum-the-Integers-from-1-to-N