给定两个数组,编写一个函数来计算它们的交集。
示例 1:
输入:nums1 = [1,2,2,1], nums2 = [2,2]
输出:[2,2]
示例 2:
输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出:[4,9]

解题思路:

  1. 先对数组进行排序,然后使用两个指针,分别指向两个数组的开始位置
  2. 如果两个指针指向的值相同,说明这个值是他们的交集,就把这个值加入到集合list中,然后两个指针在分别往后移一步。
  3. 如果两个指针指向的值不同,那么指向的值相对小的往后移一步,相对大的先不动,然后再比较。
  4. 重复2、3步骤,直到其中一个指针不能再移动为止,最后返回list

请看代码

  1. // 两个一维数字数组求交集
  2. export const getMixed = (arr1, arr2) => {
  3. arr1.sort((a, b) => { return a - b })
  4. arr2.sort((a, b) => { return a - b })
  5. let i = 0
  6. let j = 0
  7. let list = [] // 存放相同数组元素
  8. // 当其中一个数组遍历结束就跳出循环
  9. while (i < arr1.length && j < arr2.length) {
  10. if (arr1[i] < arr2[j]) {
  11. // 如果i指向的值小于j指向的值,说明i指向的值小了,i往后移一步
  12. i++
  13. } else if (arr1[i] > arr2[j]) {
  14. // 如果i指向的值大于j指向的值,说明j指向的值小了,j往后移一步
  15. j++
  16. } else {
  17. // 如果i指向的值等于j指向的值, 说明这两个值是重复的元素,存入list中,i和j同时后移
  18. list.push(arr1[i])
  19. i++
  20. j++
  21. }
  22. }
  23. return [...list]
  24. }
  25. // 也可以使用map解决,创建json, key: value, key表示数组元素,value表示出现的次数