日期:2014-05-16  浏览次数:20369 次

请教:从两个数组中找出不相同,同时要区分出是从那个数组中取出的好点算法。
如题。解决立刻给分

------解决方案--------------------
100 分居然没人取,俺来,哈

基本思路:先倒排序并复制数组,然后两层循环比较,

发现一样滴就删除,并判断终止循环条件,最后剩下来滴就是你要滴结果。

代码如下,L@_@K:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN " "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd ">
<html xmlns= "http://www.w3.org/1999/xhtml ">
<head>
<title> Array Compare </title>
<meta name= "generator " content= "editplus " />
<meta name= "author " content= "yixianggao@126.com " />
<meta name= "keywords " content= "javascript " />
<meta name= "description " content= "for javascript region of csdn " />
</head>

<body>
<script type= "text/javascript ">
<!--
function AscSort(x, y) {
return x == y ? 0 : (x > y ? 1 : -1);
}

function DescSort(x, y) {
return x == y ? 0 : (x > y ? -1 : 1);
}

var arrNum1 = new Array(5, 1, 3, 2);
var arrNum2 = new Array(12, 7, 5, 3);

// 字符串也好用,哈!
// var arrNum1 = new Array( "t ", "b ", "w ", "i ");
// var arrNum2 = new Array( "bb ", "t ", "a ", "ww ");

var arrNum1Copy = arrNum1.slice(0).sort(DescSort);
var arrNum2Copy = arrNum2.slice(0).sort(DescSort);
// 数组交换标志。
var isExchange = false;

if (arrNum1Copy[arrNum1Copy.length-1] < arrNum2Copy[arrNum2Copy.length-1])
{
isExchange = true;
var tempArray = arrNum1Copy;
arrNum1Copy = arrNum2Copy;
arrNum2Copy = tempArray;
}

var cycleStopping = false;
for (var i=arrNum1Copy.length-1; i> =0; i--)
{
for (var j=arrNum2Copy.length-1; j> =0; j--)
{
if (arrNum1Copy[i] > arrNum2Copy[0])
{
cycleStopping = true;
break;
}
else if (arrNum1Copy[i]==arrNum2Copy[j])
{
arrNum1Copy.splice(i, 1);
arrNum2Copy.splice(j, 1);
continue;
}
}
if (cycleStopping) break;
}

alert( "isExchange: " + isExchange + "\n " + arrNum1Copy + "\n " + arrNum2Copy)

//-->
</script>
</body>
</html>

------解决方案--------------------
可以用空间换时间的方法
<script language=javascript>
function find(a,b)
{
var temp={}
var result=new Array();
for(var i=0;i <a.length;i++)
{
temp[a[i]]=1
}
for(var i=0;i <b.length;i++)
{
if(!temp[b[i]])
result.push(b[i])
}
return result;
}
var a=new Array( '1 ', 'b ', 'a ', '6 ')
var b=new Array( '2 ', 'b ', 'a ', '3 ')
var result1=find(b,a);
var result2=find(a,b);
alert(result1)
alert(result2)
</script>
------解决方案--------------------
改了下:hbhbhbhbhb1021(天外水火(我要多努力)) 的算法.
<script language= "JavaScript ">
<!--
//可以用空间换时间的方法
function find(a,b)
{
var o={},ar = a.concat(b).sort();
var rslt = [];
for(var i=0;i <ar.length;i++)
o[ar[i]]=true;