码迷,mamicode.com
首页 > 编程语言 > 详细

leetcode每日一题(2020-07-13):350. 两个数组的交集 II

时间:2020-07-13 11:23:35      阅读:75      评论:0      收藏:0      [点我收藏+]

标签:info   ram   数组的交集   双指针   etc   一个   今日学习   指针   return   

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

今日学习:
1.啊!美好的简单题!

题解:
1.暴力法,开始居然忘了indexOf
2.暴力法,利用indexOf一次循环
3.排序法,双指针移动
4.hash法,列出较短数组元素的出现次数,遍历较长数组去比较

/**
 * @param {number[]} nums1
 * @param {number[]} nums2
 * @return {number[]}
 */
//暴力法1
var intersect = function(nums1, nums2) {
    let res = []
    if(nums1.length > nums2.length) {
        [nums1, nums2] = [nums2, nums1]
    }
    for(let i = 0; i < nums1.length; i++) {
        for(let j = 0; j < nums2.length; j++) {
            if(nums1[i] == nums2[j]) {
                res.push(nums1[i])
                nums2.splice(j, 1)
                break
            }
        }
    }
    return res
};
//暴力法2
var intersect = function(nums1, nums2) {
    let res = []
    if(nums1.length > nums2.length) {
        [nums1, nums2] = [nums2, nums1]
    }
    for(let i = 0; i < nums1.length; i++) {
        let index = nums2.indexOf(nums1[i])
        if(index != -1) {
            res.push(nums1[i])
            nums2.splice(index, 1)
        }
    }
    return res
}
//排序法
var intersect = function(nums1, nums2) {
    nums1 = nums1.sort((a, b) => a - b);
    nums2 = nums2.sort((a, b) => a - b);
    const res = [];
    for(let i = 0, j = 0;i < nums1.length && j < nums2.length;) {
        if (nums1[i] > nums2[j]) {
            j++;
        } else if (nums1[i] < nums2[j]) {
            i++;
        } else {
            res.push(nums1[i]);
            i++;
            j++;
        }
    }
    return res;
}
//hash
var intersect = function(nums1, nums2) {
    if(nums1.length > nums2.length) {
        [nums1, nums2] = [nums2, nums1]
    }
    let nums1Map = new Map()
    for(let i = 0; i < nums1.length; i++) {
        if(nums1Map.has(nums1[i])) {
            nums1Map.set(nums1[i], nums1Map.get(nums1[i]) + 1)
        } else {
            nums1Map.set(nums1[i], 1)
        }
    }
    const res = []
    for(let i = 0; i < nums2.length; i++) {
        if(nums1Map.has(nums2[i]) && nums1Map.get(nums2[i]) != 0) {
            res.push(nums2[i])
            nums1Map.set(nums2[i], nums1Map.get(nums2[i]) - 1)
        }
    }
    return res
}

leetcode每日一题(2020-07-13):350. 两个数组的交集 II

标签:info   ram   数组的交集   双指针   etc   一个   今日学习   指针   return   

原文地址:https://www.cnblogs.com/autumn-starrysky/p/13291882.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!