天天看點

【力扣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)))); 
           

繼續閱讀