代码随想录算法训练营第六天|242.有效的字母异位词 ,349. 两个数组的交集 , 202. 快乐数 ,1. 两数之和
242.有效的字母异位词
文章链接:https://programmercarl.com/0242.有效的字母异位词.html#思路
视频链接:https://www.bilibili.com/video/BV1YG411p7BA/?vd_source=6cb513d59bf1f73f86d4225e9803d47b
题目链接:https://leetcode.cn/problems/valid-anagram/
总结:这里将字符转化为对应的hash索引
class Solution {
public:
bool isAnagram(string s, string t) {
if(t.size()!=s.size()) return false;
int hash[26]={0};
for(int i=0;i<t.size();i++){ //字符串的长度也可以用size()
hash[s[i]-'a']++;
hash[t[i]-'a']--;
}
for(int i=0;i<26;i++){
if(hash[i]!=0) return false;
}
return true;
}
};
349. 两个数组的交集
文章链接:https://programmercarl.com/0349.两个数组的交集.html#算法公开课
视频链接:https://www.bilibili.com/video/BV1aT41177mK/?spm_id_from=pageDriver&vd_source=6cb513d59bf1f73f86d4225e9803d47b
题目链接:https://leetcode.cn/problems/intersection-of-two-arrays/description/
思路:一种哈希数据结构:unordered_set,自动给集合去重。
class Solution {
public:
vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
//将nums1放入hash表
unordered_set<int> res_set; //定义对象,unordered_set自动去重
unordered_set<int> nums1_set(nums1.begin(),nums1.end());//构造函数
for(int num :nums2){
if(nums1_set.find(num)!=nums1_set.end()){
res_set.insert(num);
}
}
vector<int> res(res_set.begin(),res_set.end());
return res;
}
};
202. 快乐数
文章链接:https://programmercarl.com/0202.快乐数.html
题目链接:https://leetcode.cn/problems/happy-number/description/
思路:无限循环就是说,如果sum重复出现了,那么该数就不是快乐数
class Solution {
public:
//获取每个数字的平方和
int getSum(int n){ //这里我使用的是字符串
string s=to_string(n);
int sum=0;
for(int i=0;i<s.size();i++){
int x=(s[i]-'0');
sum+=x*x;
}
//其实可以不用
// while(n){
// sum+=(n%10)*(n%10); //取最后n的最后一位数字
// sum/=10;
// }
// return sum;
}
bool isHappy(int n) {
int sum=getSum(n);
unordered_set<int> sums;
while(sum!=1){
if(sums.find(sum)!=sums.end()) return false;
sums.insert(sum);
sum=getSum(sum);
}
return true;
}
};
1. 两数之和
文章链接:https://programmercarl.com/0001.两数之和.html#思路
视频链接:https://www.bilibili.com/video/BV1aT41177mK
题目链接:https://leetcode.cn/problems/two-sum/description/
思路:* key来存元素,value来存下标,那么使用map正合适
- map中的存储结构为 {key:数据元素,value:数组元素对应的下标}
注意:unordered_map::find() 函数在 C++ 中用于查找指定的键(key),而不是值(value)。
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
unordered_map<int,int> visited_set;
for(int i;i<nums.size();i++){
auto iter=visited_set.find(target-nums[i]);
if(iter!=visited_set.end()){
return {iter->second,i};
}
else{
visited_set.insert({nums[i],i});
}
}
return {};
}
};
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!