c#以前写过一个,转了一下,应该没问题
<script>
var a = [1,2,3,4,5,6];
var b = [4,5,6,7,8,9];
//如果不是按升序,先排序
a.sort(function(m,n){return m-n;})
b.sort(function(m,n){return m-n;})var c = getDiffElments(a,b);
alert(c);//1,2,3,7,8,9
function Array.prototype.addRange(b)
{
for(var i=0;i<b.length;i++)
{
this.push(b[i]);
}
return this;
}
function getDiffElments(a, b)
{
var c = [];
var p = a.length;
var q = b.length;
if (b[0]>a[p - 1] || b[q - 1]<a[0])//2个数组没有相同元素,全部输出a,b
{
c = a.addRange(b);
}
else
{
var m = 0;
var t = 0;
var k = 0;
var flag;
while (m<q)
{
flag = false;
for (var i = t; i < p; i++)
{
if (b[m]==a[i])
{
t = i+1;
flag = true;
break;
}
}
if (!flag){
c.push(b[m]);
}
else
{
if (t - k >2)
{
var st = k + 1;
if (k == 0) st = 0;
for (var i = st; i < t - 1; i++)
{
c.push(a[i]);
}
}
k = t - 1;
} if (m == q - 1)
{
for (var i = k + 1; i < p; i++)
{
c.push(a[i]);
}
}
m++;
}
}
return c;
}
</script>
<script>
var a = [1,2,3,4,5,6];
var b = [4,5,6,7,8,9];
//如果不是按升序,先排序
a.sort(function(m,n){return m-n;})
b.sort(function(m,n){return m-n;})var c = getDiffElments(a,b);
alert(c);//1,2,3,7,8,9
function Array.prototype.addRange(b)
{
for(var i=0;i<b.length;i++)
{
this.push(b[i]);
}
return this;
}
function getDiffElments(a, b)
{
var c = [];
var p = a.length;
var q = b.length;
if (b[0]>a[p - 1] || b[q - 1]<a[0])//2个数组没有相同元素,全部输出a,b
{
c = a.addRange(b);
}
else
{
var m = 0;
var t = 0;
var k = 0;
var flag;
while (m<q)
{
flag = false;
for (var i = t; i < p; i++)
{
if (b[m]==a[i])
{
t = i+1;
flag = true;
break;
}
}
if (!flag){
c.push(b[m]);
}
else
{
if (t - k >2)
{
var st = k + 1;
if (k == 0) st = 0;
for (var i = st; i < t - 1; i++)
{
c.push(a[i]);
}
}
k = t - 1;
} if (m == q - 1)
{
for (var i = k + 1; i < p; i++)
{
c.push(a[i]);
}
}
m++;
}
}
return c;
}
</script>
要用2个for...for二重循环);
var a = [1, 2, 3, 4, 5, 6];
var b = [4, 5, 6, 7, 8, 9];
var c = "";
for (var i = 0; i < a.length; i++) {
var d = false;
for (var j = 0; j < b.length; j++) {
if (a[i] == b[j]) {
d = true; break;
}
} if (d) c += a[i] + "," + b[j] + ",";
}
document.write(c); var all = a.concat(b);
all.sort();
var s = all.join(',');
var reg=new RegExp(c,"g");
s = s.replace(reg, '');
alert(s);
}
function xm()
{
var a = [1,2,3,4,5,6];
var b = [4,5,6,7,8,9];
var c = "";
var strA = "";
var strB = "";
for(i=0;i<a.length;i++)
{
strA+=a[i]+",";
}
for(i=0;i<b.length;i++)
{
strB+=b[i]+",";
}
for(var i=0;i<a.length;i++)
{
var d = false;
for(var j=0;j <b.length;j++)
{
if(a[i]==b[j])
{
d = true; break;
}
}
if(d)
{
strA = strA.replace(a[i]+",","");
strB = strB.replace(a[i]+",","");
}
}
c=strA + strB;
document.write(c);
}
xm();
我的算法思路是这样的:
1.判断b[0]>b[5]或者b[5]<a[0],直接输入a,b合集
2.m=0,b[0]开始,在a[]中遍历,
如果找到大于等于b[0]的,flag=true,标识a[]中下次查找位置t=i+1,break;
3.如果flag=false,说明a[]中没有b[0],b[0]入栈c.push(b[0])
否则说明有说明有a[]中有b[0],因为是a是从小到大排序好的,
t位置之前的元素,b[]中肯定没有,所以都可以被c push入栈
4.如果m是b最后一个元素,这是如果t小于a.length,那a[]中>=m位置所有元素只要不等于b[m]都入栈,结束
5.m++,m<=a.length进入步骤1
上面算法改了一下
<script>
var a = [1,2,3,9,9,11];
var b = [4,5,6,7,8,9];
//如果不是按升序,先排序
a.sort(function(m,n){return m-n;})
b.sort(function(m,n){return m-n;})var c = getDiffElments(a,b);
alert(c);//1,2,3,7,8,9
function Array.prototype.addRange(b)
{
for(var i=0;i<b.length;i++)
{
this.push(b[i]);
}
return this;
}
function getDiffElments(a, b)
{
var c = [];
var p = a.length;
var q = b.length;
if (b[0]>a[p - 1] || b[q - 1]<a[0])//2个数组没有相同元素,全部输出a,b
{
c = a.addRange(b);
}
else
{
var m = 0;
var t = 0;
var k = 0;
var flag;
while (m<q)
{
flag = false;
for (var i = t; i < p; i++)
{
if (b[m]<=a[i])
{
t = i+1;
flag = true;
break;
}
}
if (!flag){
c.push(b[m]);
}
else
{
if (t - k >2)
{
var st = k + 1;
if (k == 0) st = 0;
for (var i = st; i < t - 1; i++)
{
c.push(a[i]);
}
}
k = t - 1;
} if (m == q - 1)
{
for (var i = t-1; i < p; i++)
{
if(a[i]!=b[m])c.push(a[i]);
}
}
m++;
}
}
return c;
}
</script>