这是一道freecodecamp上面的算法题目
用了一堆for循环来解决了这道题,这显然是比较初级的阶段,但是好在自己没有查看其它的资料,独立完成了这个挑战。
题目大概是这样的:
给定两个数组集合,要求返回两个集合的差集。
diffArray([1, 2, 3, 5, 6], [1, 2, 3, 4, 5]) should return an array.
["diorite", "andesite", "grass", "dirt", "pink wool", "dead shrub"], ["diorite", "andesite", "grass", "dirt", "dead shrub"] should return ["pink wool"].
["diorite", "andesite", "grass", "dirt", "pink wool", "dead shrub"], ["diorite", "andesite", "grass", "dirt", "dead shrub"] should return an array with one item.
["andesite", "grass", "dirt", "pink wool", "dead shrub"], ["diorite", "andesite", "grass", "dirt", "dead shrub"] should return ["diorite", "pink wool"].
["andesite", "grass", "dirt", "pink wool", "dead shrub"], ["diorite", "andesite", "grass", "dirt", "dead shrub"] should return an array with two items.
["andesite", "grass", "dirt", "dead shrub"], ["andesite", "grass", "dirt", "dead shrub"] should return [].
["andesite", "grass", "dirt", "dead shrub"], ["andesite", "grass", "dirt", "dead shrub"] should return an empty array.
[1, 2, 3, 5], [1, 2, 3, 4, 5] should return [4].
[1, 2, 3, 5], [1, 2, 3, 4, 5] should return an array with one item.
[1, "calf", 3, "piglet"], [1, "calf", 3, 4] should return ["piglet", 4].
[1, "calf", 3, "piglet"], [1, "calf", 3, 4] should return an array with two items.
[], ["snuffleupagus", "cookie monster", "elmo"] should return ["snuffleupagus", "cookie monster", "elmo"].
assed[], ["snuffleupagus", "cookie monster", "elmo"] should return an array with three items.
[1, "calf", 3, "piglet"], [7, "filly"] should return [1, "calf", 3, "piglet", 7, "filly"].
[1, "calf", 3, "piglet"], [7, "filly"] should return an array with six items.
下面是具体的代码:
function diffArray(arr1, arr2) {
var newArr1 = [];
var newArr2 = [];//定义两个数组来执行接下来的运算
// Same, same; but different.
arr1.sort();
arr2.sort();//将输入的两个参数数组排序
for (let i = 0; i < arr1.length; i++)
{
for (let j = 0; j < arr2.length; j++)
{
if (arr1[i] === arr2[j])
{
newArr1.push(arr1[i]);
}
}
}//求出两个数组的交集newArr1
for (let i = 0; i < arr1.length; i++)
{
var count = 0;//这里使用了一个计数器count实现补集的运算
for (let j = 0; j < newArr1.length; j++)
{
if (arr1[i] === newArr1[j])
{
count++;
}
}
if(count === 0)
{
newArr2.push(arr1[i]);
}
}//求出数组arr1与交集newArr1的补集,并将它所含的元素交给(push到)newArr2
for (let i = 0; i < arr2.length; i++)
{
var count = 0;
for (let j = 0; j < newArr1.length; j++)
{
if (arr2[i] === newArr1[j])
{
count++;
}
}
if(count === 0)
{
newArr2.push(arr2[i]);
}
}//求出数组arr2与交集newArr1的补集,并将它所含的元素交给(push到)newArr2
return newArr2;//得到最终的差集数组
}
console.log(diffArray([1,2,3,5,6], [1,2,3,4,5]));
可以给这个算法做一个集合运算
已知集合A{x1,x2,x3,...},B{y1,y2,y3,...}
求 :C = A && B - A || B
解:令D = A || B,C = (A - D)+(B - D) = A + B - 2D
网友评论