AS3面试题:复杂算法的改进
最近在网上看到一个AS3面试题,感兴趣写了个答案,当然标不标准我就不知道了~ var n:int, m:int; var range:int = 100; for(var i:int = 1; i <= range; i ++){ n = 1; while(true){ if(n > i / n){ break; } if(i % n == 0){ if(i / n == n){ trace("结果",i); break; } } n ++; } } 下面是写着玩的缩写版本,不过正常写项目代码,我不会这样干的,在这儿只是娱乐一下而已。下面这段代码想玩就看看,不想玩的看上面就行了,判断原理是一样,没区别! var n:int = 1, range:int = 1000;for(var i:int = 1; i <= range; i += n = 1){ while(n > 0) n = n > i / n ? 0 : !(i % n) ? i / n == n ? -1 : n + 1 : n + 1; if(n == -1) trace("结果",i); } 我将range都改成100000后,第一种方法耗时7233毫秒,第二种缩减的写法耗时1840毫秒。对于易读易懂,你会选择那种方法呢? 对于暗泪同学的回复,下面增加一点内容: var num:int = Math.pow(range,0.5); for(var i:int = 1; i <= num; i ++){ trace("结果",i * i) } 我测试过10亿次的效率,仅需要6毫秒~何其快啊! |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |