题目来源于知识星球—英雄算法联盟,六月算法集训专题
目录
前言
跟随英雄算法联盟博主—英雄哪里出来,每天完成相应的算法练习,一个月后,必定会有所成长!
一、442.数组中重复的数据(中等)
1.题目描述
2.解题思路
由题意可知数组中的每个元素都出现过一次或者两次,因此我们用哈希数组来
对原数组中的元素的出现次数进行计数,如果一个元素出现了两次,那么将这
个元素存入新的数组中,最终返回这个数组即可。
3.代码演示(C++)
class Solution
{
public:
vector<int> findDuplicates(vector<int>& nums)
{
int n=nums.size();
vector<int>ans;
vector<int>cnt(n+1);
for(int i=0;i<n;i++)
{
cnt[nums[i]]++;
}
for(int i=1;i<=n;i++)
{
if(cnt[i]==2)
{
ans.push_back(i);
}
}
return ans;
}
};
4.题目链接
二、2068.检查两个字符串是否几乎相等(简单)
1.题目描述
2.解题思路
声明一个数组a来存储两个字符串中字母的出现次数,数组a记录26个字母
出现的次数,如果在字符串word1中出现,那么次数++;如果在字符串word2
中出现,那么次数--,最后遍历数组a,对于26个字母出现的次数,如果绝对
值都小于等于3,那么可以认为这两个字符串几乎相等,即返回true,否则返
回false。
3.代码演示(C++)
class Solution
{
public:
bool checkAlmostEquivalent(string word1, string word2)
{
int a[26]={0};
for(int i=0;i<word1.length();i++)
{
a[word1[i]-'a']++;
a[word2[i]-'a']--;
}
for(int i=0;i<26;i++)
{
if(abs(a[i])>3)
{
return false;
}
}
return true;
}
};
4.题目链接
三、2283.判断一个数的数字计数是否等于数位的值(简单)
1.题目描述
2.解题思路
哈希数组的简单应用。
3.代码演示(C++)
class Solution
{
public:
bool digitCount(string num)
{
int hash[11];
memset(hash,0,sizeof(hash));
if(num=="0")
{
return false;
}
for(int i=0;i<num.size();i++)
{
hash[num[i]-'0']++;
}
for(int i=0;i<num.size();i++)
{
if(hash[i]!=num[i]-'0')
{
return false;
}
}
return true;
}
};
4.题目链接
四、884.两句话中的不常见单词(简单)
1.题目描述
2.解题思路
代码来源于官方题解!
3.代码演示(C++)
class Solution
{
public:
vector<string> uncommonFromSentences(string s1, string s2)
{
unordered_map<string, int> freq;
auto insert = [&](const string& s)
{
stringstream ss(s);
string word;
while (ss >> word)
{
++freq[move(word)];
}
};
insert(s1);
insert(s2);
vector<string> ans;
for (const auto& [word, occ]: freq)
{
if (occ == 1)
{
ans.push_back(word);
}
}
return ans;
}
};
4.题目链接
总结
每天跟随英雄哥学习相关的算法,一个月会收获很多,如果你想了解更多关于知识星球的内容,欢迎联系我!