[Advanced Algorithm] - 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}).
提示
Array.reduce()
Symmetric Difference
测试用例
sym([1, 2, 3], [5, 2, 1, 4])应该返回[3, 4, 5].sym([1, 2, 3], [5, 2, 1, 4])应该只包含三个元素.sym([1, 2, 5], [2, 3, 5], [3, 4, 5])应该返回[1, 4, 5]sym([1, 2, 5], [2, 3, 5], [3, 4, 5])应该只包含三个元素.sym([1, 1, 2, 5], [2, 2, 3, 5], [3, 4, 5, 5])应该返回[1, 4, 5].sym([1, 1, 2, 5], [2, 2, 3, 5], [3, 4, 5, 5])应该只包含三个元素.sym([3, 3, 3, 2, 5], [2, 1, 5, 7], [3, 4, 6, 6], [1, 2, 3])应该返回[2, 3, 4, 6, 7].sym([3, 3, 3, 2, 5], [2, 1, 5, 7], [3, 4, 6, 6], [1, 2, 3])应该只包含五个元素.sym([3, 3, 3, 2, 5], [2, 1, 5, 7], [3, 4, 6, 6], [1, 2, 3], [5, 3, 9, 8], [1])应该返回[1, 2, 4, 5, 6, 7, 8, 9].sym([3, 3, 3, 2, 5], [2, 1, 5, 7], [3, 4, 6, 6], [1, 2, 3], [5, 3, 9, 8], [1])应该只包含八个元素.
分析思路
- 由于传入参数是可变的,所以会用到
arguments,又由于arguments只有length属性,所以要把arguments转换成普通数组,代码如下:
var argArray = Array.from(arguments); - 根据题目,分析 A,B 中互相存在的元素,都需要过滤掉,用下面的代码过滤:
function diff(A, B) {
return A.filter(function(val) {
return !B.includes(val);
});
}
这个函数是去掉 A 中所有 B 拥有的元素,交换 A,B 位置,去掉B 中所有 A拥有的元素,这样既可取出题目所需:
diff(A, B).concat(diff(B, A))
3. 使用 reduce 方法实现多个数组遍历;
4. 从测试用例中发现不能出现重复的数组值返回,所以需要去重,去重函数:
function delSame(arr) {
return arr.filter(function(val, curindex) {
return curindex == arr.indexOf(val);
});
}
代码
function sym() {
// difference between set A and set B
function diff(A, B) {
return A.filter(function(val) {
return !B.includes(val);
});
}
function delSame(arr) {
return arr.filter(function(val, curindex) {
return curindex == arr.indexOf(val);
});
}
var argArray = Array.from(arguments);
return delSame(argArray.reduce(function(arr, cur) {
return diff(arr, cur).concat(diff(cur, arr)).sort();
}));
}
// test here
sym([1, 2, 3], [5, 2, 1, 4]);
[Advanced Algorithm] - Symmetric Difference的更多相关文章
- js-FCC算法-Symmetric Difference
创建一个函数,接受两个或多个数组,返回所给数组的 对等差分(symmetric difference) (△ or ⊕)数组. 给出两个集合 (如集合 A = {1, 2, 3} 和集合 B = {2 ...
- FCC(ES6写法) Symmetric Difference
创建一个函数,接受两个或多个数组,返回所给数组的 对等差分(symmetric difference) (△ or ⊕)数组. 给出两个集合 (如集合 A = {1, 2, 3} 和集合 B = {2 ...
- Symmetric Difference FreeCodeCamp
function sym(args) { var arr = Array.prototype.slice.call(arguments); return arr.reduce((arr1, arr2) ...
- FCC高级编程篇之Symmetric Difference
Symmetric Difference Create a function that takes two or more arrays and returns an array of the sym ...
- hackerrank---Sets - Symmetric Difference
题目链接 集合操作 附上代码: M = int(input()) m = set(map(int, raw_input().strip().split())) N = int(input()) n = ...
- Symmetric Difference
function sym(args) { //return args; var arr = []; for(var i = 0; i < arguments.length; i++){ arr. ...
- 高级算法设计讲义 Lecture Notes for Advanced Algorithm Design
(Last modification: 2012-12-17) Textbooks: (1) David Williamson, David Shmoys. The Design of Approxi ...
- [Advanced Algorithm] - Inventory Update
题目 依照一个存着新进货物的二维数组,更新存着现有库存(在 arr1 中)的二维数组. 如果货物已存在则更新数量 . 如果没有对应货物则把其加入到数组中,更新最新的数量. 返回当前的库存数组,且按货物 ...
- [Advanced Algorithm] - Exact Change
题目 设计一个收银程序 checkCashRegister(),其把购买价格(price)作为第一个参数 , 付款金额 (cash)作为第二个参数, 和收银机中零钱 (cid) 作为第三个参数. ci ...
随机推荐
- vim学习3-查找替换
一.字符的替换及撤销(Undo操作) 1.替换和撤销(Undo)命令 替换和Undo命令都是针对普通模式下的操作 命令 说明 r+<待替换字母> 将游标所在字母替换为指定字母 R 连续替换 ...
- 3、ceph-deploy之配置使用文件系统
我们在admin节点执行下述操作,来配置使用ceph集群的文件系统 必备条件 1.在ceph-client节点安装ceph ceph-deploy install ceph-client 2.确认ce ...
- elasticsearch match和match_phrase匹配原则(十)
分词测试 分词后倒排索引结果:可以通过http://127.0.0.1:9200/_analyze 测试 { "analyzer":"ik_max_word", ...
- mode-c++
/*感谢机房JYW的友情馈赠*/#include <iostream> #include <cstdio> #include <cstring> #include ...
- axis实现webservices分布式通信
分布式通信原理 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY2ZsMjAxMjEzMTQ=/font/5a6L5L2T/fontsize/400/fil ...
- Android Fragment实现button间的切换
原文地址:http://blog.csdn.net/a123demi/article/details/32693037 Fragment要点 Fragment是activity的界面中的一部分或一种行 ...
- 1366 xth 的第 12 枚硬币
1366 xth 的第 12 枚硬币 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 题目描述 Description 传说 xth 曾 ...
- oc59--匿名分类
// // main.m // 匿名分类(延展) // 可以为某个类扩展私有的成员变量和方法,写在.m文件中, // 分类不可以扩展属性,分类有名字,匿名分类没有名字. #import <Fou ...
- hdoj--5104--Primes Problem(素数打表)
Primes Problem Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) T ...
- hihocoder 1680 hiho字符串2 dp求方案数+递归
我们定义第一代hiho字符串是"hiho". 第N代hiho字符串是由第N-1代hiho字符串变化得到,规则是: h -> hio i -> hi o -> ho ...