js 取兩數字陣列交集
阿新 • • 發佈:2018-12-06
今天刷LeetCode發現了陣列交集的問題,平時工作也都用的非常普遍。所以特別留意了,兩個數字陣列的交集,有兩題
1.交集陣列不包含重複數字
2.交集陣列包含重複數字
第一題:先給兩個陣列分別去重,然後再雙迴圈遍歷比較,自己想的比較low,參考discuss大神寫的https://leetcode.com/submissions/detail/193703614/
大概就是先遍歷其中一個數組,遍歷到每個元素當做屬性存入物件,繼續遍歷第二個陣列對比這個物件的屬性,存在即存入結果返回
程式碼如下:
var intersection = function(nums1, nums2) { const nums1Hash= {} const resultArr = [] nums1.forEach(i => nums1Hash[i] = true) nums2.forEach(i => { if (nums1Hash[i] === true) { resultArr.push(i) nums1Hash[i] = false } }) return resultArr };
第二題:我使用的方法和第一題一樣,只不過物件的值不是bool值,而是通過物件值計數。這樣就不會遺漏重複的數字了,沒想到一瞧discuss,總有大神。 https://leetcode.com/submissions/detail/193705336/
程式碼如下:
使用陣列的reduce,不斷歸併陣列,達到遍歷比較的目的
var intersect = function(nums1, nums2) { if(nums1.length > nums2.length){ //swap values [nums1, nums2] = [nums2, nums1]; } const map = nums1.reduce((map, val) => { map[val]= (map[val] || 0) + 1; return map; }, {}); // console.log(map); return nums2.reduce((res, val) => { if(map[val] && map[val] > 0){ res.push(val); map[val]--; } return res; }, []); };