查找数组中被删除的一个元素
一个数组arr0,长度任意,删除其中某个元素后得到数组arr,求删除的元素
最容易想到的方法:顺序查找,两个循环
functionfindItem1(arr0,arr){/* arr0:原始数组 arr: 随机去除某一个元素后的数组 */if(!arr0||arr0.length<1||arr0.length-arr.length!=1)return'error';if(arr0.length==1)returnarr0[0]; for(){ for(vari=0,l=arr0.length;i<l;i++){varm=0,n=arr.length;m<n&&arr0[i]!==arr[m];m++if(m==n-1)returnarr0[i]; } } }
最容易想到的方法一般都是效率最低的方法,发了半天呆又想到了二分查找
functionfindItem2(arr0,arr){/* arr0:原始数组 arr: 随机去除某一个元素后的数组 */if(!arr0||!arr||arr0.length<1||arr0.length-arr.length!=1)return'error';if(arr0.length==1)returnarr0[0];functioncompare(ascArr1,ascArr2){//ascArr1.length-ascArr2.length==1varci = Math.floor(ascArr1.length/2);if(ascArr1[ci]!==ascArr2[ci]){if(ci==0||ascArr1[ci-1]==ascArr2[ci-1])returnascArr1[ci];elsereturncompare(ascArr1.slice(0,ci),ascArr2.slice(0,ci)); }else{if(ci==ascArr2.length-1)returnascArr1[ci+1];elsereturncompare(ascArr1.slice(ci+1),ascArr2.slice(ci+1)); } }returncompare(arr0,arr); }
暂时只想到这两种方法,应该还有更高效的方法,想到了再补充。查看本文demo
浙公网安备 33010602011771号