sea
F2E第158号成员
入住于2013-01-01
ID
sea
Email
249087***@qq.com
回复列表
回复了 sea 创建的主题 算法一入深似海,从此前端是路人

比较好的算法是时间复杂度是o(n),空间复杂度是o(1)的。有两个:1.3楼的方法。2.用异或性质解。
方法1的常数时间小,较优,个人实现如下:

var num=1e2,
    inputArray=[],
    deleted,
    i=num;
while(i){
    inputArray[i-1]=i;
    i--;
}
inputArray.sort(function(){
    return Math.random()-0.5;
});
deleted=inputArray.splice(0,2);

function sumAndSqirt(){
    var n=0,
        m=0,
        i=num-2,
        foundDelete=[];
    while(i--){
        n+=inputArray[i];
        m+=inputArray[i]*inputArray[i];
    }
    n=(1+num)*num/2-n;
    m=num*(num+1)*(2*num+1)/6-m;
    foundDelete.push((n+Math.sqrt(2*m-n*n))/2);
    foundDelete.push(n-foundDelete[0]);
}

sumAndSqirt();

感谢@guokai 给我们提供这么好的交流社区,及开源代码供学习。

1 主题
2 回复
0 收藏
16 威望
我的二维码