首页 > 编程语言 >代码随想录算法训练营第六天 | 242.有效的字母异位词 、349. 两个数组的交集、 202. 快乐数 、 1. 两数之和

代码随想录算法训练营第六天 | 242.有效的字母异位词 、349. 两个数组的交集、 202. 快乐数 、 1. 两数之和

时间:2024-05-13 23:08:32浏览次数:15  
标签:set 随想录 number param 202 let 哈希 讲解 两数

哈希表理论基础

建议:大家要了解哈希表的内部实现原理,哈希函数,哈希碰撞,以及常见哈希表的区别,数组,set 和map。
什么时候想到用哈希法,当我们遇到了要快速判断一个元素是否出现集合里的时候,就要考虑哈希法。 这句话很重要,大家在做哈希表题目都要思考这句话。
文章讲解:https://programmercarl.com/哈希表理论基础.html

242.有效的字母异位词

建议: 这道题目,大家可以感受到 数组 用来做哈希表 给我们带来的遍历之处。
题目链接/文章讲解/视频讲解: https://programmercarl.com/0242.有效的字母异位词.html

/**
 * @param {string} s
 * @param {string} t
 * @return {boolean}
 * 还可以思考怎么简化代码
 */
var isAnagram = function(s, t) {
    let mapS = new Map();
    for(let i=0; i<s.length; i++) {
        if(mapS.has(s[i])){
            let num =  mapS.get(s[i]);
            num++;
            mapS.set(s[i], num);
        } else {
            mapS.set(s[i], 1);
        }
    }

    for(let i=0; i<t.length; i++){
        if(!mapS.has(t[i])){
            return false;
        } else {
            // // mapS.set(s[i], mapS.get(s[i])--);
            // mapS.get(s[i])--
            let num =  mapS.get(t[i]);
            num--
            mapS.set(t[i], num);
        }
    }
    for(let value of mapS.values()){
        if(value!==0){
            return false;
        }
    }
    return true;
};
  1. 两个数组的交集

建议:本题就开始考虑 什么时候用set 什么时候用数组,本题其实是使用set的好题,但是后来力扣改了题目描述和 测试用例,添加了 0 <= nums1[i], nums2[i] <= 1000 条件,所以使用数组也可以了,不过建议大家忽略这个条件。 尝试去使用set。
题目链接/文章讲解/视频讲解:https://programmercarl.com/0349.两个数组的交集.html

/**
 * @param {number[]} nums1
 * @param {number[]} nums2
 * @return {number[]}
 * 还可以简化代码
 */
var intersection = function(nums1, nums2) {
    const mapS1 = new Map();
    for(let i=0;i<nums1.length;i++){
        if(mapS1.has(nums1[i])){
            let num = mapS1.get(nums1[i]);
            num++;
            mapS1.set(nums1[i], num);
        }else{
            mapS1.set(nums1[i], 1);
        }
    }
    let setRes = new Set();
    for(let i=0;i<nums2.length;i++){
        if(mapS1.has(nums2[i])){
            setRes.add(nums2[i]);
        }
    }
    return [...setRes];
    
};
  1. 快乐数

建议:这道题目也是set的应用,其实和上一题差不多,就是 套在快乐数一个壳子
题目链接/文章讲解:https://programmercarl.com/0202.快乐数.html

/**
 * @param {number} n
 * @return {boolean}
 */
var isHappy = function(n) {
    let set = new Set();
    let curNum = n;

    while(!set.has(curNum)&&curNum!==1){
        set.add(curNum);
        let total = 0;
        let nString = curNum.toString();
        for(let i=0;i<nString.length;i++){
            total+=Math.pow(nString[i],2);
        }
        curNum = total;
    }
    if (curNum===1) {
        return true;
    }
    return false;
};
  1. 两数之和

建议:本题虽然是 力扣第一题,但是还是挺难的,也是 代码随想录中 数组,set之后,使用map解决哈希问题的第一题。
建议大家先看视频讲解,然后尝试自己写代码,在看文章讲解,加深印象。
题目链接/文章讲解/视频讲解:https://programmercarl.com/0001.两数之和.html

/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number[]}
 * 本题思考重点,哈希表map的key和value用来存什么,一开始没想出来
 */
var twoSum = function(nums, target) {
    const map = new Map();
    for(let i=0;i<nums.length;i++){
        let del = target -nums[i];
        if(map.has(del)){
            return [map.get(del), i];
        } else {
            map.set(nums[i], i);
        }
    }
    return [];
};

标签:set,随想录,number,param,202,let,哈希,讲解,两数
From: https://www.cnblogs.com/yuanyf6/p/18190267

相关文章

  • 2024 AI中转计费平台系统源码
    简介:2024AI中转计费平台系统源码图片:    点击下载 ......
  • PKUSC2024 游记
    事不过三,但是第三次/cfDay\([-7,-3]\)一些模拟赛&适应linux。挺答辩的。三场加起来只在第二场过了一题,还是中午加班过的,第一场的答辩背包没调出来。代码能力太差。第三场摆烂了,拿了40pts跑路。这段时间都比较想摆烂的说(周四清理了一下键盘。非常舒畅啊!并且还把旁边的yhd......
  • .NET周刊【5月第1期 2024-05-05】
    国内文章一个开源轻量级的C#代码格式化工具(支持VS和VSCode)https://www.cnblogs.com/Can-daydayup/p/18164905CSharpier是一个开源、免费的C#代码格式化工具,特点是轻量级且依赖Roslyn引擎重构代码格式。支持的IDE包括VisualStudio(2019与2022)和VisualStudioCode等。该项......
  • 2024盘古石取证比赛(服务器)
      检材链接:https://pan.baidu.com/s/1YWxb2xlkN7kZTZO4scG5Kw?pwd=4dd8 容器密码:2b26ba7ed35d622d8ec19ad0322abc52160ddbfa 前期准备工作veracrypt解压火眼仿真im.dd,web.dd虚拟机开启虚拟机进入vm环境,但是进去出现问题——不知道用户名(火眼会把密码修改为123456)—......
  • linux里安装sql2022详细步骤
    https://learn.microsoft.com/zh-tw/sql/linux/quickstart-install-connect-ubuntu?view=sql-server-linux-ver16&preserve-view=true&tabs=ubuntu2004https://learn.microsoft.com/zh-tw/sql/linux/quickstart-install-connect-ubuntu?view=sql-server-linux-ver16&a......
  • 20240513打卡
    第十二周第一天第二天第三天第四天第五天第六天第七天所花时间1h代码量(行)144博客量(篇)1知识点了解界面美化CSS,mdn官网学习......
  • Testing Egineer note:2024_5_13-day08-part02
    数据库mysql命令1.启动mysqlservicemysqldstart#开启数据库(我们使用数据要保持数据库开启)servicemysqldstatus#查看数据库的状态servicemysqldstop#关闭数据库servicemysqldrestart#重启数据库2.进入数据库与账户密码设置mysqladmin-urootpassword'123456......
  • PKUSC & APIO 2024 游记
    Day0因学校名额过剩,参加生物学联赛,大概率省四。因大暴雨延误3小时抵达杭州。杭州晚上比广东略冷。Day1早上试机调试了1h的sublime配置。中午饭很难吃,而且报告厅很难休息。13:00开考。先看T1,思考了一会,发现这个题是每次单点修改,求最长回文串,根本无法做。打sub2,然......
  • 又是一个月-20240513
    【今天又是什么日子】今天是2024年5月13日,五一假期补班后第一周的第一天;是母亲节,结婚一周年纪念日的第一天;是某个同事在职的最后一天;是又忙忙碌碌一个月一事无成后的普通的一天;【上次来是什么时候】上次是2024年4月8日,刚好也是某个节日后的一天,【为啥突然记得来了】过完......
  • 2024年许愿,希望明年不裁员
    哈喽,大家好,我是木头左,物联网搬砖工一名,致力于为大家淘出更多好用的AI工具!2024年许愿:希望明年不裁员引言随着2023年的结束,迎来了新的一年,也迎来了新的希望和期待。在这个特殊的时刻,许多人开始对未来进行各种设想和规划,其中包括对2024年的展望。其中,一个被广泛提出的愿望就是希......