对差等分
博客专区 > 万城 的博客 > 博客详情
对差等分
万城 发表于8个月前
对差等分
  • 发表于 8个月前
  • 阅读 2
  • 收藏 0
  • 点赞 0
  • 评论 0

【腾讯云】新注册用户域名抢购1元起>>>   

摘要: Symmetric Difference
function duichadengfen2(args) {
    var arr = [];
for (var i = 0; i < arguments.length; i++) {
    arr.push(arguments[i]); //用数组组成新的数组
    arr[i] = arr[i].filter((function(item,index,array){
        return array.indexOf(item) == index;        //去重,判断索引值是否等于indexOf返回的首次出现的位置,如果不等于就是出现了两次,这样只会返回一个
    }))
}
//下面这个result没用,只是演示用的
var result = arr.filter(function(item,index,array){
        return array.indexOf(item) == index;        //去重,判断索引值是否等于indexOf返回的首次出现的位置,如果不等于就是出现了两次,这样只会返回一个
    });
    /*arr.forEach(function (i) { //删去每个数组项重复的部分
        for (var j = 0; j < i.length - 1; j++) {        //用相邻排序法,这个是第一位k是第二位,所以这个是length-1
            for (var k = j + 1; k < i.length; k++)
                if (i[j] == i[k]) {     //如果相邻两位相等
                    i.splice(j, 1);     //如果相等则删除当前这个元素
                    j--; //重新定位J的位置
                }
        }
    });*/
    arr.reduce(function (prev, cur, index, array) { //归并数组,并且删去后项中相同的项。第一个参数是合并后的数组第二个是当前数组
        prev.forEach(function (m) {         //如果prev里的某个值没在cur里出现,则把这个值push到cur里去
            if (cur.indexOf(m) == -1)
                cur.push(m);
            else cur.splice(cur.indexOf(m), 1);     //如果prev里的某个值在cur里出现过,则删除这个值
        });
        return cur;     //所有的值都存在了cur里,返回就可以了,
    });
    return arr[arr.length - 1];     //reduce会迭代到最后一个数组,所以最后一个数组才是结果
}
duichadengfen2([3, 3, 3, 2, 5], [2, 1, 5, 7], [3, 4, 6, 6], [1, 2, 3]);

/*

function sym(args) {
  var args1 = arguments[0],
      args2 = arguments[1],
      result = [];
  for (var u=0; u<args1.length; u++){
    if(args2.indexOf(args1[u]) === -1){
      result.push(args1[u]);
    }
  }
  for (var i=0; i<args2.length; i++){
    if(args1.indexOf(args2[i]) === -1){
      result.push(args2[i]);
    }
  }
  return result;
}

sym([1, 2, 3], [5, 2, 1, 4]);*/
        function sym(args) {
            var arr = [];
            for (var i = 0; i < arguments.length; i++) {
                arr.push(arguments[i]); //用数组组成新的数组
            }
            arr.forEach(function (i) { //删去每个数组项重复的部分
                for (var j = 0; j < i.length - 1; j++) {
                    for (var k = j + 1; k < i.length; k++)
                        if (i[j] == i[k]) {
                            i.splice(j, 1);
                            j--; //重新定位J的位置
                        }
                }

                // console.log(arr);
            });
          /*去重更好的方法
          return temp.filter(function(item,index,array){
             return array.indexOf(item) == index;
             });//自身查重只需要让它本身第一次出现在原数组的位置为索引值index,就可以保留且只保留一个。*/
            // return arr;
            arr.reduce(function (prev, cur, index, array) { //归并数组,并且删去后项中相同的项。
                prev.forEach(function (m) {
                    if (cur.indexOf(m) == -1)
                        cur.push(m);
                    else cur.splice(cur.indexOf(m), 1);
                });
                return cur;
            });

            return arr[arr.length - 1];
        }

        sym([3, 3, 3, 2, 5], [2, 1, 5, 7], [3, 4, 6, 6], [1, 2, 3]);

function sym(args) {
  var arrs=[];
  for(var a of arguments){    //es6
    arrs.push(a);
  }
  var res=arrs.reduce(function(a,b){  
    a=del(a);
    b=del(b);  //数组分别处理
    var arr=a.concat(b);   
    return del(arr,true);  //拼接成一个大数组后,再进行一次处理
  });
  
 return res;
}
 
function del(arr,flag){   //排序and去重   flag为true表示删干净,否则留一个
  var start,end;    
  arr.sort(function(a,b){  //数组由小到大排序
    return a-b;
  });
  for(var i=0;i<arr.length;i++){
    if(arr[i]==arr[i+1]){  //发现重复
      start=(start===undefined)?i:start;  //start为重复的起始位置
      end=i+1;           //end为重复的结束位置
    }else{   
      if( end && end==i ){  //如果存在重复,即end有值,按照flag对数组进行处理。
        if( flag ){
          arr.splice(start,end-start+1);
          i=i-(end-start+1);
        }else{
          arr.splice(start,end-start);
          i=i-(end-start);
        }
        start=undefined;  //没有重复了,start要还原
      }      
    }
  }
  
  return arr;
  
}
sym([1, 1, 2, 5], [2, 2, 3, 5], [3, 4, 5, 5]);

 

 

 

  • 打赏
  • 点赞
  • 收藏
  • 分享
共有 人打赏支持
粉丝 0
博文 45
码字总数 62136
×
万城
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: