给定两个数组,编写一个函数来计算它们的交集。
示例 1:
输入:nums1 = [1,2,2,1], nums2 = [2,2]
输出:[2,2]
示例 2:
输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出:[4,9]
解题思路:
- 先对数组进行排序,然后使用两个指针,分别指向两个数组的开始位置
- 如果两个指针指向的值相同,说明这个值是他们的交集,就把这个值加入到集合list中,然后两个指针在分别往后移一步。
- 如果两个指针指向的值不同,那么指向的值相对小的往后移一步,相对大的先不动,然后再比较。
- 重复2、3步骤,直到其中一个指针不能再移动为止,最后返回list
请看代码
// 两个一维数字数组求交集export const getMixed = (arr1, arr2) => {arr1.sort((a, b) => { return a - b })arr2.sort((a, b) => { return a - b })let i = 0let j = 0let list = [] // 存放相同数组元素// 当其中一个数组遍历结束就跳出循环while (i < arr1.length && j < arr2.length) {if (arr1[i] < arr2[j]) {// 如果i指向的值小于j指向的值,说明i指向的值小了,i往后移一步i++} else if (arr1[i] > arr2[j]) {// 如果i指向的值大于j指向的值,说明j指向的值小了,j往后移一步j++} else {// 如果i指向的值等于j指向的值, 说明这两个值是重复的元素,存入list中,i和j同时后移list.push(arr1[i])i++j++}}return [...list]}// 也可以使用map解决,创建json, key: value, key表示数组元素,value表示出现的次数
