双指针
- 利用双指针,先将两个数组排序,
- 当两个数组的指针指向的元素一样时,将指针所在的数组的元素输出到交集arr数组中,两个指针向后移动
- 当不一样时,做比较,数小的指针向后移
//输入: nums1 = [1,2,2,1], nums2 = [2,2] 输出: [2,2]
nums1 = [4, 9, 5], nums2 = [9, 4, 9, 8, 4]
var intersect = function(nums1, nums2) {
nums1.sort(function (a,b) {
return a-b;
});
nums2.sort(function (a,b) {
return a-b;
});
var arr=[]
var index1 = 0, index2 = 0;
while (index1 < nums1.length && index2 < nums2.length) {
if (nums1[index1] < nums2[index2]) {
index1++;
} else if (nums1[index1] > nums2[index2]) {
index2++;
} else {
arr.push(nums2[index2])
index1++;
index2++;
}
}
return arr
};
reduce
- 利用reduce遍历其中一个数组,判断两数组的元素是否相同
var intersect = function (nums1, nums2) {
return nums1.reduce(function (v, t) {
var i
if ((i = nums2.indexOf(t)) !== -1) {
v.push(t)
nums2.splice(i, 1)
}
return v
}, [])
};
欢迎大家交流讨论更多方法,我也会持续更新