【五月集训】第七天打卡( 哈希表)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


1512. 好数对的数目

题目链接

好数对的数目

思路

  • 用哈希表记录每次迭代的数出现的次数,若已出现进行累加
  • 计数器累加当前数出现的次数

题解

  • ts
function numIdenticalPairs(nums: number[]): number {
    // let sum = 0;
    // for (let i = 0; i < nums.length; ++i) {
    //     for (let j = i + 1; j < nums.length; ++j) {
    //         if (nums[i] == nums[j]) {
    //             sum++;
    //         }
    //     }
    // }
    // return sum;
    let map: Map<number, number> = new Map()
    let sum = 0;
    for (let item of nums) {
        sum += map.get(item) || 0
        if (map.has(item)) {
            let num = map.get(item)
            map.set(item, ++num)
        } else {
            map.set(item, 1)
        }
    }
    return sum;
};

2006. 差的绝对值为 K 的数对数目

题目链接

差的绝对值为 K 的数对数目

思路

  • 定义一个哈希表,枚举 j,分别查找 nums[j] + k 和 nums[j] - k 是否在哈希表中,并且累加计数;
  • 将 nums[j] 插入哈希表;

题解

  • ts
function countKDifference(nums: number[], k: number): number {
    let hash = {};
    let ans = 0;
    for (let j = 0; j < nums.length; ++j) {
        let x = nums[j] + k;
        if (x >= 1 && x <= 100) {
            ans += hash[x] || 0;
        }
        x = nums[j] - k;
        if (x >= 1 && x <= 100) {
            ans += hash[x] || 0;
        }
        let num = hash[nums[j]] || 0
        hash[nums[j]] = ++num;
    }

    return ans;
};

1347. 制造字母异位词的最小步骤数

题目链接

制造字母异位词的最小步骤数

思路

  • 使用两个哈希表分别映射来年两个字符串
  • 计算两个哈希表每个字母对应的差值当差值为负数累加

题解

  • ts
function minSteps(s: string, t: string): number {
    let ans = 0, i
    let hash1 = {}, hash2 = {}
    for (i = 0; s[i]; ++i) {
        if (hash1[s[i]]) {
            ++hash1[s[i]]
        } else {
            hash1[s[i]] = 1
        }
        if (hash2[t[i]]) {
            ++hash2[t[i]]
        } else {
            hash2[t[i]] = 1
        }
    }
    for (i = 97; i <= 122; ++i) {
        let x = (hash1[String.fromCharCode(i)] || 0) - (hash2[String.fromCharCode(i)] || 0);
        if (x > 0) {
            ans += x;
        }
    }
    return ans


};

面试题 10.02. 变位词组

题目链接

变位词组

思路

  • 定义一个哈希表,先将每个字符串按照字典排序,然后插入哈希表
  • 遍历哈希表,展成二维数组

题解

  • ts
function groupAnagrams(strs: string[]): string[][] {
    let map = {}
    let ret = []
    for (let i = 0; i < strs.length; ++i) {
        let s: any = strs[i].split('')
        s.sort((a, b) => a.charCodeAt(0) - b.charCodeAt(0))
        s = s.join('')
        if (map[s]) {
            map[s].push(strs[i])
        } else {
            map[s] = [strs[i]]
        }
    }
    for(let key in map){
        ret.push(map[key])
    }
    return ret

};
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值