天天看点

【力扣LeetCode】JS求数组交集差集

题目描述

给定两个数组,编写一个函数来计算它们的交集(保留重复元素)。
           

源代码(保留重复元素)

function compare(v1,v2){
        if(v1<v2)return -1;
        else if(v1>v2) return 1;
        else return 0;
    }

var intersect = function(nums1, nums2) {
    
    var i=0,j=0;
    var arr=new Array();
    nums1.sort(compare);
    nums2.sort(compare);
 
    while(i<nums1.length&&j<nums2.length){
        if(nums1[i]==nums2[j]){
            arr.push(nums1[i]);
            i++;
            j++;
        }
        else if(nums1[i]<nums2[j]){
            i++;
        }else {
            j++;
        }
    }
    return arr;  
};
           

因为不熟悉js,所以直接用sort()排序,但是sort()排序是按照首字母第一位进行排序的,这样显然不对,需要在sort()里面添加一个比较函数compare();

以下方法都是去除重复元素的

源代码(这种方法去除重复元素)

求交集

var intersect = function(nums1, nums2) {
    var seta=new Set(nums1);
    var setb=new Set(nums2);
    
    var st=Array.from(new Set(nums1.filter(v=>setb.has(v))));
    return st;  
};
           

求并集

let union = Array.from(new Set(num3.concat(num4))); 
           

求差集

var num3=[1,2,2,1];
	var num4=[2,2];
	var seta=new Set(num3);
    var setb=new Set(num4);
	 
	let difference = Array.from(new Set(num3.concat(num4).filter(v=>!seta.has(v)||!setb.has(v)))); 
           

继续阅读