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


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

    今日学习:
    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
    }
    
  • 相关阅读:
    Openrasp源码分析
    feifeicms后台任意文件读取
    python之迭代器和生成器
    java之导入excel
    jquery单击事件的写法
    java之高效操作文件
    多条件搜索优化sql
    java之代码复用
    java之接口文档规范
    eclipse之常用快捷键
  • 原文地址:https://www.cnblogs.com/autumn-starrysky/p/13291882.html
Copyright © 2020-2023  润新知