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