难度:简单

    题目描述:
    给定两个数组,编写一个函数来计算它们的交集。

    示例:

    1. 输入: nums1 = [1,2,2,1], nums2 = [2,2]
    2. 输出: [2,2]

    解题思路:
    暴力解法,遍历短数组,查询元素在长数组中index值,如果存在则找到交集,并从长数组中删除该元素

    1. var intersect = function(nums1, nums2) {
    2. let short = []
    3. let lang = []
    4. let x = []
    5. if(nums1.length > nums2.length) {
    6. short=nums2
    7. lang = nums1
    8. } else {
    9. short=nums1
    10. lang = nums2
    11. }
    12. for(let i = 0; i< short.length; i++){
    13. let index = lang.indexOf(short[i])
    14. if(index !== -1){
    15. lang.splice(index, 1)
    16. x.push(short[i])
    17. }
    18. }
    19. return x;
    20. };

    哈希表
    先用Hashmap记录第一个数组中的元素【放在key】,和出现的次数【放在value】。

    然后再遍历第二个数组,如果找到对应元素,则添加这个元素到返回数组里。

    如果value值大于1,HashMap中的value值减 1,表示已经找到一个相同的了。

    如果value值等于1,则删除该元素

    1. var intersect = function(nums1, nums2) {
    2. let hash = new Map()
    3. let res = []
    4. for(let i = 0; i < nums1.length; i++) {
    5. if(hash.has(nums1[i])) {
    6. hash.set(nums1[i], hash.get(nums1[i]) + 1)
    7. } else {
    8. hash.set(nums1[i], 1)
    9. }
    10. }
    11. for(let i = 0; i < nums2.length; i++) {
    12. let temp = nums2[i]
    13. let hashKey = hash.get(temp)
    14. if(hash.has(temp)) {
    15. res.push(temp)
    16. if(hashKey > 1) {
    17. hash.set(temp, hashKey - 1)
    18. } else {
    19. hash.delete(temp)
    20. }
    21. }
    22. }
    23. return res
    24. };
    1. 两个数组排序
    2. 设定两个为0的指针,比较两个指针的元素是否相等
    3. 如果相等,元素push到返回值里,两个指针同时往前
    4. 如果不相等,元素小的指针往前
      1. var intersect = function(nums1, nums2) {
      2. let p1 = 0
      3. let p2 = 0
      4. let res = []
      5. nums1 = nums1.sort((a, b) => a - b)
      6. nums2 = nums2.sort((a, b) => a - b)
      7. while(p1 < nums1.length && p2 < nums2.length) {
      8. if(nums1[p1] == nums2[p2]) {
      9. res.push(nums1[p1])
      10. p1++
      11. p2++
      12. } else if(nums1[p1] < nums2[p2]) {
      13. p1++
      14. } else {
      15. p2++
      16. }
      17. }
      18. return res
      19. };