代码随想录算法训练营第5天 【哈希表】| 242.有效的字母异位词 349. 两个数组的交集 349. 两个数组的交集 1. 两数之和

60 阅读1分钟

242.有效的字母异位词

1.数组方法

349. 两个数组的交集

1.哈希表 Set

哈希表 Set 1.哈希表api:new Set(arr), set.has(), set.add(), Array.from(set) 2.思路:先将一个数组拍成哈希表,然后查找另一个数组的共同元素,再将共同元素加入新的哈希表

/**
 * @param {number[]} nums1
 * @param {number[]} nums2
 * @return {number[]}
 */
var intersection = function(nums1, nums2) {
    // 先把长的数组做成哈希表
    let nums1Set = new Set(nums1);
    let resSet = new Set();
    // 查表,添加nums2中元素
    for (let i = 0; i < nums2.length; i++) {
        if (nums1Set.has(nums2[i])) {
            resSet.add(nums2[i])
        }
    }

    return Array.from(resSet);

};

2.数组 Array

202. 快乐数

Set方法

Set

0.理解sum出现重复循环,即不可能是“快乐数”

1.求各位数平方和

2.set判断方法

/**
 * @param {number} n
 * @return {boolean}
 */
var isHappy = function(n) {

    // 两位数的各位数平方和
    const getSum = function(num) {
        let sum = 0;
        // 各位
        while (num) {
            sum += (num % 10) ** 2
            num = Math.floor(num / 10);
        }
        return sum;
    }


    let set = new Set();
    while (true) {
        if (n === 1) return true;
        if (set.has(n)) return false;
        set.add(n);
        n = getSum(n);
    }


};

1. 两数之和

哈希表 注意key&value分别是什么

哈希表法 map

/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number[]}
 */
var twoSum = function(nums, target) {
    let map = new Map();
    for (let i = 0; i < nums.length; i++) {
        if (map.has(target - nums[i])) {
            return [i, map.get(target - nums[i])]
        }
        // 关键
        map.set(nums[i], i);
    }
    return [];
};