算法训练day5| 哈希表理论基础 有效的字母异位词 两个数组的交集 快乐数 两数之和

  • 有效的字母异位词
class Solution {
public:
    bool isAnagram(string s, string t) {
        int record[26] = {0};    //可以用一个0代表全体都为0
        for(int i = 0 ; i < s.size() ; i++){//注意看这里的s.size()是否要-1
            record[s[i] - 'a']++;    //本题的核心实际上就在这里了,这里可以采用数字去描述字母,这个是精髓
        }
        for(int j = 0 ; j < t.size() ; j++){   
            record[t[j] - 'a']--;
        }
        for(int k = 0 ; k < 26 ; k++){
            if(record[k] != 0){
                return false;
            }
        }
        return true;
    }
};
  • 两个数组的交集
class Solution {
public:
    vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
        unordered_set<int> result_set;     //核心就是对unordered_set这个容器的理解,它会将一系列内容按序列排好,而且保证不会有重复内容
        unordered_set<int> use1(nums1.begin(), nums1.end());
        for(int num : nums2){
            if(use1.find(num) != use1.end()){
                result_set.insert(num);
            }
        }
        return vector<int>(result_set.begin(),result_set.end());   //这里注意看vector是如何定义的,可以有.begin()和.end()两种
    }
};
  • 快乐数 
class Solution {
public:
    
//n % 10 是一个取模运算,它返回 n 除以 10 的余数。这个操作常用于获取一个整数的最后一位数字。
    int getSum(int n){
        int sum = 0;
        while(n){
            sum += (n % 10) * (n % 10);
            n = n / 10 ;  //n /= 10 是一个复合赋值操作,它等价于 n = n / 10。这个操作将 n 的值除以 10,并将结果重新赋值给 n。在编程中,这种操作通常用于去除一个整数 n 的最后一位数字。
        }
        return sum;
    }
    bool isHappy(int n){
       unordered_set<int> use;
        while(1){
            int sum = getSum(n);
            if(sum == 1){
                return true;
        } 
            if(use.find(sum) != use.end()){
                return false;
            }
            else{
                use.insert(sum);
            }
            n = sum;   //这句话很重要
       }
    }

};
  • 两数之和 
    class Solution {
    public:
        vector<int> twoSum(vector<int>& nums, int target) {
            std::unordered_map<int,int> use1;
            for(int i = 0; i < nums.size(); i++){
                auto iter = use1.find(target - nums[i]);
                if(iter != use1.end()){
                    return {iter->second , i};
                }
                use1.insert(pair<int,int>(nums[i],i));  //注意pair的用法
            }
            return {};  //这里还搞不懂为什么
        }
    };

  • 7
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值