兩個陣列的交集(Intersection of Two Arrays)

虛擬碼

沒空寫

解題

350. Intersection of Two Arrays II

題目說明

輸入2個陣列nums1和nums2,求這2個陣列有交集的元素。
比如範例輸入的nums1 = [1,2,2,1], nums2 = [2,2],元素有2個2都出現,所以要回傳[2, 2]。

解法

對此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

/**
* @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;
};

可參考

[name=@denny0628] [time=Tue, Nov 23, 2022 14:45 PM] [color=#907bf7]