
方法一:使用交集
交集可以直接使用 Set 数据结构:
function intersection(nums1: number[], nums2: number[]): number[] {const set1 = new Set(nums1)const result: number[] = []nums2.forEach(num => {if (set1.has(num)) {result.push(num)// 避免结果重复,因此将匹配过的数字从 set1 中删除set1.delete(num)}})return result};
方法二:排序+双指针
如果两个数组是有序的,就可以使用双指针的方法来得到交集。首先两个指针分别指向两个数组的头部,移动较小值的指针。当两个数字相同的时候,则将数字记录到结果中。但是需要注意的是需要与结果末尾的数字进行判断,来查看数字是否已经存在于结果中了。由于数组是排序过的,所以添加到结果中的数字必然也是排序的。
var intersection = function(nums1, nums2) {nums1.sort((a, b) => a - b);nums2.sort((a, b) => a - b);let index1 = 0;let index2 = 0;const result = [];while(index1 < nums1.length && index2 < nums2.length) {const num1 = nums1[index1]const num2 = nums2[index2]if (num1 === num2) {// 结果为空的时候,无需考虑结果重复的情况,直接将数字添加到结果中// 如果结果不为空,则需要考虑一下结果中是否已经包含了相同的数字if (result.length === 0 || result[result.length - 1] !== num1) {result.push(num1)}index1++index2++} else if (num1 <num2) {index1++} else {index2++}}return result};
