--- tags: Data Structure I, LeetCode disqus: HackMD --- # 兩個陣列的交集(Intersection of Two Arrays) ## 虛擬碼 ```pseudocode= 沒空寫 ``` ## 解題 [350. Intersection of Two Arrays II](https://leetcode.com/problems/intersection-of-two-arrays-ii/?envType=study-plan&id=data-structure-i) ### 題目說明 輸入2個陣列nums1和nums2,求這2個陣列**有交集**的元素。 比如範例輸入的nums1 = [1,2,2,1], nums2 = [2,2],元素有2個2都出現,所以要回傳[2, 2]。 ![](https://i.imgur.com/XVO4HLG.png) ![](https://i.imgur.com/FDES7WR.png) ### 解法 對此2個陣列都從小到大排序,建立兩個指標i和j各自從nums1和nums2的最小值往上比對: 如果目前指標指向的值一樣,代表是交集的元素,加入答案,i和j都遞增 如果目前指標指向的值nums1[i] > nums2[j],代表nums2更後面的值要拿來與nums1比對,所以只有j遞增 如果目前指標指向的值nums1[i] < nums2[j],代表nums1更後面的值要拿來與nums2比對,所以只有i遞增 最終i和j有超過nums1/nums2的長度就結束。 **Javascript** ```javascript= /** * @param {number[]} nums * @return {boolean} */ var intersect = function(nums1, nums2) { let short,log; let anums = []; //比較兩個陣列長度,使用較短的比較時間越快 世界越快心則慢 if (nums1.length < nums2.length) { short = nums1; log = nums2; } else { short = nums2; log = nums1; } for (let i = 0; i < short.length; i++) { if (log.indexOf(short[i]) >= 0) { //indexOf找出元素索引值 log[log.indexOf(short[i])] = null; //將被比較方第一個交集數字換成null anums.push(short[i]); //push進入空陣列 } } return anums; }; ``` [可參考](https://hannahpun.gitbook.io/leetcode-note/array/350-intersection-of-two-arrays-ii-you-tu) > [name=@denny0628] [time=Tue, Nov 23, 2022 14:45 PM] [color=#907bf7]