代码随想录算法训练营第六天|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 {};
    }
};
posted @   W-Vicky11  阅读(245)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
点击右上角即可分享
微信分享提示