两个数组的交集
集合论中,设A,B是两个集合,由所有属于集合A且属于集合B的元素所组成的集合,叫做集合A与集合B的交集。
集合 {1,2,3} 和 {2,3,4} 的交集为 {2,3}。
//filter实现
let intersect = (a,b) => a.filter(x => b.indexOf(x) > -1);
//Set实现
let intersect1 = (a, b) = >{
const bSet = new Set(b);
return [...new Set(a.filter(x = >bSet.has(x)))];
}
let intersect2 = (a, b) = >{
let result = new Set();
const other = new Set(b);
a.forEach(value = >{
if (other.has(value)) {
result.add(value);
}
});
return [...result];
}
两个数组的并集
集合论中,设A,B是两个集合,把他们所有的元素合并在一起组成的集合,叫做集合A与集合B的并集。
集合{1, 2, 3} 和 {2, 3, 4} 的并集是 {1, 2, 3, 4}。
//filter+concat实现
let union = (a,b) => a.concat(b.filter(x => !(a.indexOf(x) > -1) ));
//Set实现
let union1 = (a,b) => [...new Set([...a, ...b])];
两个数组的差集
设A,B是两个集合,A={1,2,3,4,5} B={1,2,3,6} 差集B-A={6} 即把B中属于A的元素去掉。
//filter实现
let difference = (a,b) => a.filter(x => b.indexOf(x) === -1);
//Set实现
let difference2 = (a,b) => {
const bSet = new Set(b);
return [...new Set([...a].filter(x => !bSet.has(x)))];
}
验证子集
如果集合A的任意一个元素都是集合B的元素,那么集合A称为集合B的子集。
设A,B是两个集合,A={1,2} B={1,2,3,4,5},A是B的子集。
//验证b是a的子集
let isSubset = (a,b) => {
const aSet = new Set(a), bSet = new Set(b);
if(bSet.size > aSet.size) { return false; }
let result = true;
b.forEach(value => {
if(!aSet.has(value)){
result = false;
return false;
}
})
return result;
}
测试
var a = [1,2,3,4,5], b = [2,4,6,8,10], c = [1,2];
//a与b的交集
console.log(intersect(a,b)); //[2,4]
console.log(intersect1(a,b));//[2,4]
//a与b的并集
console.log(union(a,b)); //[1,2,3,4,5,6,8,10]
console.log(union1(a,b)); //[1,2,3,4,5,6,8,10]
//a-b的差集,即把a中属于b的去掉
console.log(difference(a,b)); //[1,3,5]
console.log(difference2(a,b)); //[1,3,5]
//b-a的差集,即把b中属于a的去掉
console.log(difference(b,a)); //[6,8,10]
//验证子集
console.log(isSubset(a,b)); //false
console.log(isSubset(a,c)); //true
LeetCode相关题
78.子集
leetcode-cn.com/problems/su…
90.子集 II
leetcode-cn.com/problems/su…
349.两个数组的交集
leetcode-cn.com/problems/in…
350.两个数组的交集 II
leetcode-cn.com/problems/in…