0


【六月算法集训 】第七天之哈希表

《算法集训传送门》

👉引言

在这里插入图片描述
铭记于心🎉✨🎉我唯一知道的,便是我一无所知🎉✨🎉


💖
❄️我们的算法之路❄️💖

众所周知,作为一名合格的程序员,算法 能力 是不可获缺的,并且在算法学习的过程中我们总是能感受到算法的✨魅力✨。
               ☀️🌟短短几行代码,凝聚无数前人智慧;一个普通循环,即是解题之眼🌟☀️
   💝二分,💝贪心,💝并查集,💝二叉树,💝图论,💝深度优先搜索(dfs),💝宽度优先搜索(bfs),💝数论,💝动态规划等等, 路漫漫其修远兮,吾将上下而求索! 希望在此集训中与大家共同进步,有所收获!!!🎉🎉🎉


今日主题:哈希表


👉⭐️第一题💎

✨题目

      442. 数组中重复的数据

✨思路:

使用哈希表进行计数,这里使用map代替,然后统计所有次数为2的返回

✨代码:

classSolution{public:
    vector<int>findDuplicates(vector<int>& nums){
    map<int,int>ans;for(int i =0; i < nums.size(); i++){
        ans[nums[i]]++;}
    vector<int>res;for(map<int,int>::iterator it = ans.begin(); it != ans.end(); it++){if(it->second ==2)res.push_back(it->first);}return res;}};

👉⭐️第二题💎

✨题目

      2068. 检查两个字符串是否几乎相等

用两个哈希表统计两个字符串中各字符出现的次数,然后分别遍历每个哈希表,得到value1与该key在另外一个哈希表中的vlaue2的绝对差值,若出现大于3则返回false

✨代码:

classSolution{public:boolcheckAlmostEquivalent(string word1, string word2){
    map<char,int>ans1, ans2;for(char t : word1){
        ans1[t]++;}for(char t : word2){
        ans2[t]++;}for(map<char,int>::iterator it = ans1.begin(); it != ans1.end(); it++){if(abs(ans2[it->first]- it->second)>3)returnfalse;}for(map<char,int>::iterator it = ans2.begin(); it != ans2.end(); it++){if(abs(ans1[it->first]- it->second)>3)returnfalse;}returntrue;}};

👉⭐️第三题💎

✨题目

      2283. 判断一个数的数字计数是否等于数位的值

✨思路:

思路

✨代码:

classSolution{public:booldigitCount(string num){int n[11]={0};for(int i =0; i < num.size(); i++){
        n[num[i]-'0']++;}for(int i =0; i < num.size(); i++){if(n[i]!=(num[i]-'0'))returnfalse;}returntrue;}};

👉⭐️第四题💎💎

✨题目

      884. 两句话中的不常见单词

✨思路:

这里使用sstream分割字符串中的空格,其实正常的话直接scanf就行,但是力扣这里需要提供接口就没办法了,,跟之前一样,计数完后查找即可

✨代码:

classSolution{public:
vector<string>uncommonFromSentences(string s1, string s2){
    vector<string>ans;
    map<string,int>t1, t2;
    stringstream ss;
    ss << s1;
    string tem;while(getline(ss, tem,' '))    t1[tem]++;
    ss.clear();
    ss.str("");
    ss << s2;while(getline(ss, tem,' '))   t2[tem]++;for(map<string,int>::iterator it = t1.begin(); it != t1.end(); it++){if(it->second ==1&&(!t2[it->first])){
            ans.push_back(it->first);}}for(map<string,int>::iterator it = t2.begin(); it != t2.end(); it++){if(it->second ==1&&(!t1[it->first])){
            ans.push_back(it->first);}}return ans;}};

⭐️总结⭐️

今天的题比较简单,主要就是使用哈希表进行计数,然后寻找关系,哈希表可以自己用数组设置,进阶一点的话会有加强哈希表,可以存储更多信息

写在最后
相信大家对今天的集训内容的理解与以往已经有很大不同了吧,或许也感受到了算法的魅力,当然这是一定的,路漫漫其修远兮,吾将上下而求索!伙伴们,明天见!


本文转载自: https://blog.csdn.net/runofsun/article/details/125164704
版权归原作者 梦想new的出来 所有, 如有侵权,请联系我们删除。

“【六月算法集训 】第七天之哈希表”的评论:

还没有评论