`
jackra
  • 浏览: 6768 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

平凡中的简单

阅读更多

在51js上看到一个题目。
从1到10w(共10w个数)中随机抽走2个数,然后打乱剩下的数的顺序,问如果从这剩下的数中快速的找出抽走的是哪2个数?
一位牛人朋友写了一个利用积差与和差来判断的方式。
具体参照http://www.cnblogs.com/meteoric_cry/archive/2011/03/16/1986008.html。

我个人是想不到如此了,我想到的是另外一个简单的方式。就是制作数组,然后用下表来排除相应的元素,使得最后数组的元素剩下被抽走的2个数据。考虑到数组下标本身的定位方式,是地址方式直接的定位,所以对cpu的占用情况并不大。效率应该还是可以的。如果js中真的是链表形式存储数组元素的话,那么就可以使用多维的方式进行快速定位.因为要对机器里的东西进行清理,决定在iteye保留此代码,此帖只为保留源码.

 

            var n = 100* 1000;
            var arr = [];
            for (var i = 0; i < n ; i++) {
                arr.push(i+1);
            }
            var num1 = arr.splice(Math.floor(Math.random() * arr.length), 1);
            var num2 = arr.splice(Math.floor(Math.random() * arr.length), 1);
           
            document.write('抽掉数:<br/>第1个数是:' + num1 + ',第2个数是:' + num2 + '<br/><br/>');
           
            var arr2=new Array(100);
            for(var i=0;i<100;i++){
                arr2[i]=new Array(1000);
                for(var j=0;j<1000;j++){
                    arr2[i][j]=i*1000+j;   
                }   
            }
            for(var idx in arr){
                var temp=arr[idx]-1;
                var idx1=Math.floor(temp/1000);
                var idx2=temp%1000;
                delete(arr2[idx1][idx2]);   
            }
            for(var idx in arr2){
                if(arr2[idx].length!=0){
                    for(var idx2 in arr2[idx]){
                        document.write(arr2[idx][idx2]+1+"<br/>");
                    }
                }
            }

许多复杂问题都有简单而又平凡的方式来处理,我个人并不是一个很博学的人,对于处理问题也总是从简单平凡的方式来处理,当然这许多人的眼里或许太普通了,程度就是如此也没什么办法,只有在自己能想到的范围里来解决问题。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics