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

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

时间:2024-07-10 13:28:22浏览次数:20  
标签:202 return int 随想录 ++ vector 数组 set 两数

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

最近有点忙,哈希表章节的博客可能没有以前那么多图和那么详细了。不过忙完这段时间我可能会回来补的。

有效字母异位词

题目链接/文章讲解/视频讲解: https://programmercarl.com/0242.%E6%9C%89%E6%95%88%E7%9A%84%E5%AD%97%E6%AF%8D%E5%BC%82%E4%BD%8D%E8%AF%8D.html

思路

这题是我们直接使用数组就可以完成任务,题目中有几点比较关键

  • s,t的每个字符出现次数要相同
  • s,t要包含同样的字符

于是我们的数组就可以设置为下标代表26个字母,数组所包含的值作为字符出现的次数

接下里就先遍历s,出现的字符直接在对应的数组位置上++;然后再遍历t,出现的字符直接在对应的数组位置上–;最终数组元素全部归零即为有效字母异位词。

代码

class Solution {
public:
    bool isAnagram(string s, string t) {
        int record[26] = {0};
        for(int i = 0; i < s.size(); i++)
        {
            record[s[i]-'a']++;
        }
        for(int i = 0; i < t.size(); i++)
        {
            record[t[i]-'a']--;
        }
        for(int j = 0; j < 26 ; j++)
        {
            if(record[j]!=0)
            {
                return false;
            }
        }
        return true;
    }
};

两个数组的交集

题目链接/文章讲解/视频讲解:https://programmercarl.com/0349.%E4%B8%A4%E4%B8%AA%E6%95%B0%E7%BB%84%E7%9A%84%E4%BA%A4%E9%9B%86.html

思路

首先,交集是集合,那么我们使用std::set<int>当然是最好的,其特点相信只要高中学过集合都知道是无序不可重复。先把一个数组的所有元素加入set中(有重复元素,set会自动过滤),然后再遍历另外一个数组,对每个元素使用find,若在set中找到了改元素,则留下(在交集中),找不到的,就删去

代码

class Solution {
public:
    vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
        //使用集合set
        set<int> s;
        for(int i = 0; i < nums1.size(); i++)
        {
            s.insert(nums1[i]);
        }
        vector<int> result;
        for(int i = 0; i < nums2.size(); i++)
        {
            if(s.find(nums2[i]) != s.end())
            {
                result.push_back(nums2[i]);
                s.erase(nums2[i]);
            }
        }
        return result;
    }
};

快乐数

题目链接/文章讲解:https://programmercarl.com/0202.%E5%BF%AB%E4%B9%90%E6%95%B0.html

思路

这题要注意这几点:

  • 什么时候会出现无限循环:

    a → b → c → a a\rightarrow b\rightarrow c\rightarrow a a→b→c→a从这可以看出如果出现了之前出现的数那么就会陷入循环(有点像数电中的计数器的自启动)所以我们可以用哈希表记录出现过的和

  • 如何分开每位数并求和:

    利用%10取最高位,用/10去除最高位

代码

class Solution {
public:
    bool isHappy(int n) {
        set<int> s;
        while(s.find(n)==s.end())
        {
            s.insert(n);
            int sum = 0;
            while(n)
            {
                int temp = n%10; //取最高位
                sum+=temp*temp;
                n = n/10;//去最高位
            }//这个可以看出模版
            
            if(sum==1)
            {
                return true;
            }
            n = sum;
        }
        return false;
    }
};

两数之和

题目链接/文章讲解/视频讲解:https://programmercarl.com/0001.%E4%B8%A4%E6%95%B0%E4%B9%8B%E5%92%8C.html

思路

这题用哈希表就很简单了。直接遍历数组,对于每一个元素,先find一下看看哈希表中有没有对应的相加为target的元素,有则返回,无则加入到哈希表中。

  • 这里我们使用unordered_map,其搜索速度快!时间复杂度为O(1),并且每一个数映射(map)为其数组下标,方便直接返回

代码

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        unordered_map<int, int> unmp;
        for (int i = 0; i < nums.size(); ++i) {
            if (unmp.find(target - nums[i]) != unmp.end()) {
                return vector<int>{unmp[target - nums[i]], i};
            }
            unmp[nums[i]] = i;
        }
        return vector<int>{};
    }
    
};

今天的题还比较简单,主要是掌握哈希表的思路

标签:202,return,int,随想录,++,vector,数组,set,两数
From: https://blog.csdn.net/U_L_Yxan/article/details/140321362

相关文章

  • 【02】计算两数相乘
    A*B问题题目描述输入两个正整数AAA和BBB,求......
  • CvT:微软提出结合CNN的ViT架构 | 2021 arxiv
    CvT将Transformer与CNN在图像识别任务中的优势相结合,从CNN中借鉴了多阶段的层级结构设计,同时引入了ConvolutionalTokenEmbedding和ConvolutionalProjection操作增强局部建模能力,在保持计算效率的同时实现了卓越的性能。此外,由于卷积的引入增强了局部上下文建模能力,CvT不再需要......
  • 骨传导耳机哪个牌子好?精选2024年度最值得入手的5款骨传导耳机推荐!
    作为在数码耳机领域有着多年工作经验的达人,我见证过骨传导耳机市场的热门,也目睹了不少因盲目选购而导致听力不适或体验不佳的案例。在此,我必须郑重告诫大家,切莫轻信市场上那些夸大其词、声称完美兼顾音质与舒适度的骨传导耳机宣传!实际上,这些劣质机型不仅戴着不舒服,而且音质模糊......
  • 《用Python学数学-2021》 ([美] 彼得 • 法雷尔(Peter Farrell) [Farrell) etc.)
    pan.baidu.com/s/1tIHXj9HmIYojAHqje09DTA?pwd=jqso提取码:jqso一、问题背景高等数学应用非常广,基本上涉及到函数的地方都要用到微积分,还有在几何方面也是如此,计算机的应用让我们能简单快速处理各种高等数学中的计算,比如极限、导数、积分、微分方程等的计算。二、实验目的......
  • 代码随想录算法训练营第8天 | 复习字符串API、双指针
    2024年7月10日题344.翻转字符数组记得用双指针,时间复杂度最低。题541.反转字符串II首先自己实现一个String的reverse函数方便后面用,记得字符数组和字符串的互转方式。然后计算有多少组2k,分组处理即可。classSolution{publicStringreverseStr(Strings,intk){......
  • 20240709(byte数据转换、字典数据选择性保留、选择性查询数据库)
    需要补的知识:​ 1.HTTP协议,url里,那些header、body里都是啥东西报错信息:"服务异常'bytes'objecthasnoattribute'get'"错误原因:​ http传输中,GET方法传入的是byte格式的数据,没有.get方法#假设你有一个包含JSON数据的字节字符串json_bytes=b'{"name":"John",&quo......
  • 【2024-07-09】大宝要学
    20:00人,只有义无反顾地前行,才能在大地.上留下通往光明的履痕。                                                 ——阿多尼斯7月份,是我们家的生日月份,月初大宝生日,月......
  • 2024 「全球软件研发技术大会】-刘兴东分享京东的AIGC革新之旅
    大模型和开源的发展将带来全球软件研发技术的新变革,AI使代码自动化应用达到新水平,开源工具的云化和应用的AI化将促中国软件迎来新一轮的爆发。开发者正在迎接新一轮的技术浪潮变革。由CSDN和高端IT咨询和教育平台Boolan联合主办的2024年度「全球软件研发技术大会」于7月4日-5日在......
  • 【免费】最新最详细的华为OD2024机试题,ABCD卷,有答案,很全,很新
    最新最详细的华为OD2024机试题,ABCD卷,有答案,很全,很新!+目前461题,亲测资料非常完整好用!!最近考试换为CD卷,CD卷题库是一样的,D卷为双机位监控,某些外包公司应聘的为D卷。其中资料中JAVA,python,+JavaScript,C语言都有包含的,绝对会对你有所帮助!!获取方式:https://pan.quark.cn/s/9b122f......
  • 2024程序员行业风口和面试宝典
    国际研究机构Gartner会在每年10月份左右发布下一年度的战略发展趋势预测,并在次年3月左右发布和网络安全相关的趋势预测。绿盟科技通过将近3年的趋势预测进行分组对比分析后发现,除了众人皆知的AI技术应用外,数据模块化、身份优先安全、行业云平台也可能会成为未来网络安全领......