js-FCC算法-Symmetric Difference

创建一个函数,接受两个或多个数组,返回所给数组的 对等差分(symmetric difference) ( or )数组.

给出两个集合 (如集合 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}).

FCC高级算法里比较简单的一个了,我的方法:

 1 function sym(args) {
 2   //作用是保证每个数组里的数都是不重复的,重复的只保留一个
 3   function norepeat(arr){
 4     return arr.filter(function(val,index,array){
 5       return array.indexOf(val)===index;
 6     });
 7   }
 8   //concat后如果有重复的数,把重复的数全部去掉
 9   function add(arr1,arr2){
10     var arr=norepeat(arr1).concat(norepeat(arr2));
11     return arr.filter(function(val,index,array){
12       return array.indexOf(val)===array.lastIndexOf(val);
13     });
14   }
15   //构建参数数组
16   var arr=[];
17   for(var i=0;i<arguments.length;i++){
18     arr.push(arguments[i]);
19   }
20   //累加并排序
21   return arr.reduce(add).sort(function(num1,num2){
22     return num1-num2;
23   });
24 }
25
26 sym([3, 3, 3, 2, 5], [2, 1, 5, 17], [3, 4, 6, 6], [1, 2, 3], [5, 3, 9, 8], [1]) ;

去除重复的数使用了filter、indexOf和lastIndexOf方法,欢迎批评指正。

时间: 2024-11-05 20:48:09

js-FCC算法-Symmetric Difference的相关文章

FCC Symmetric Difference

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

hackerrank---Sets - Symmetric Difference

题目链接 集合操作 附上代码: 1 M = int(input()) 2 m = set(map(int, raw_input().strip().split())) 3 N = int(input()) 4 n = set(map(int, raw_input().strip().split())) 5 tmp = sorted(m.union(n).difference(m.intersection(n))) 6 for i in xrange(len(tmp)): 7 print tmp[

Symmetric Difference FreeCodeCamp

function sym(args) { var arr = Array.prototype.slice.call(arguments); return arr.reduce((arr1, arr2) => { return arr1.concat(arr2).filter((val) => { return arr1.indexOf(val) === -1 || arr2.indexOf(val) === -1; }).filter((val, index, arr) => { ret

js排序算法

利用js来实现一些常见的排序算法,在面试中问得还是挺多的,下面我就其进行了简单的总结. sort()方法 首先要讲讲JS数组排序的sort方法,它实现的原理是通过两两比较的方法,sort()方法按升序排列数组项,即最小的值位于最前面,最大的值位于最后面,为了实现排序,sort()方法会调用每个数组项的toString()方法,然后比较得到的字符串,即使数组中的每一项都是数值,sort方法比较的也是字符串.因此有必要定义一个比较函数: function compare(value1,value2)

JS经典算法

JS经典算法: // 1.字符串颠倒 str.split('').reverse().join('') // 2.不借助中间量,颠倒a.b a=[b,b=a][0] // 3.快速获取数组的最大值.最小值 Array.prototype.max = function () { return Math.max.apply(null, this) } Array.prototype.min = function () { return Math.min.apply(null, this) } //

FCC之JS基础算法总结1

1.翻转字符串 解决思路:先把字符串转化成数组,再借助数组的reverse方法翻转数组顺序,最后把数组转化成字符串. 1 function reverseString(str) { 2 var arr = []; 3 arr = str.split(""); 4 arr.reverse(); 5 str = arr.join(""); 6 return str; 7 } 8 9 reverseString("hello"); 主要是对String

FCC JS基础算法题(2):Check for Palindromes(检查回文字符串)

题目描述: 如果给定的字符串是回文,返回true,反之,返回false.如果一个字符串忽略标点符号.大小写和空格,正着读和反着读一模一样,那么这个字符串就是palindrome(回文).注意你需要去掉字符串多余的标点符号和空格,然后把字符串转化成小写来验证此字符串是否为回文.函数参数的值可以为"racecar","RaceCar"和"race CAR". 算法: function palindrome(str) { var str_obj = s

FCC JS基础算法题(0):Reverse a String(翻转字符串)

题目描述: 先把字符串转化成数组,再借助数组的reverse方法翻转数组顺序,最后把数组转化成字符串.你的结果必须得是一个字符串. 算法: function reverseString(str) { // 请把你的代码写在这里 str = str.split("").reverse().join(""); return str; } reverseString("hello"); 原文地址:https://www.cnblogs.com/hume

FCC JS基础算法题(1):Factorialize a Number(计算一个整数的阶乘)

题目描述: 如果用字母n来代表一个整数,阶乘代表着所有小于或等于n的整数的乘积.阶乘通常简写成 n!例如: 5! = 1 * 2 * 3 * 4 * 5 = 120. 算法: function factorialize(num) { // 请把你的代码写在这里 var result = 1; for(var i=2;i <= num;i++){ result *= i; } return result; } factorialize(1); 原文地址:https://www.cnblogs.co