Symmetric Difference-freecodecamp算法题目

Symmetric Difference


1.要求

  • 创建一个函数,接受两个或多个数组,返回所给数组的对等差分(symmetric difference)
  • 例子:给出两个集合 (如集合 A = {1, 2, 3} 和集合 B = {2, 3, 4}), 而数学术语 "对等差分" 的集合就是指由所有只在两个集合其中之一的元素组成的集合(A △ B = C = {1, 4}). 对于传入的额外集合 (如 D = {2, 3}), 你应该安装前面原则求前两个集合的结果与新集合的对等差分集合 (C △ D = {1, 4} △ {2, 3} = {1, 2, 3, 4}).

2.思路

  • 定义cut函数去除所给数组中重复的值
  • 利用for循环把输入数组去重,去重的数组转移到temp
  • 定义一个函数diff,比较两个数组a、b,把A △ B的结果赋给a,再对a进行升序排列,返回a
  • 在for循环中将temp中第1个数组与其他数组一一进行diff 最终将所求结果返回到temp[0]

3.代码

function sym(args) {
  var temp=[];
  //去除所给每个数组中重复的值
   function cut(arr){
         var result = [];
         for(var i=0;i<arr.length;i++){
             if(result.indexOf(arr[i])==-1){
                 result.push(arr[i]);
             }
         }
         return result;
   }
  //将去重的数组转移到temp
  for(var i=0;i<arguments.length;i++){
    temp.push(cut(arguments[i]));
  }
  //定义一个函数diff,比较两个数组a、b,把A △ B的结果赋给a,再对a进行升序排列,返回a
  function diff(a,b){
    
    for(var j=0;j<b.length;j++){
        if(a.indexOf(b[j])!==-1){
          a.splice(a.indexOf(b[j]),1);
        }
        else{
          a.push(b[j]);
        }
    }
    a=a.sort(function(v,t){
      return v-t;
    });
  }
  //temp中将第1个数组与其他数组一 一进行diff 最终将所求结果返回到temp[0]
  for(var k=1;k<temp.length;k++){
    diff(temp[0],temp[k]);
  }

  return temp[0];
}
sym([1, 1, 2, 5], [2, 2, 3, 5], [3, 4, 5, 5]);

4.相关链接

posted @ 2018-07-13 15:51  投弹手的香菇鸡面  阅读(185)  评论(0编辑  收藏  举报