美文网首页
我的第一篇简书

我的第一篇简书

作者: 可乐杯杯hh | 来源:发表于2018-09-16 19:22 被阅读0次

    这是一道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
    

    相关文章

      网友评论

          本文标题:我的第一篇简书

          本文链接:https://www.haomeiwen.com/subject/htufnftx.html