代码随想录算法训练营第六天|242 有效的字母异位词、349 两个数组的交集、202快乐数

一、242 有效的字母异位词

bool isAnagram(char* s, char* t) {
    int hash[26]={0};//定义一个hash数组,用于存放26个英文字母,全部标记为0
    for(int i=0;i<strlen(s);i++){//将s中出现的字母的个数存入数组
        hash[s[i]-'a']++;//记录出现次数
    }
    for(int i=0;i<strlen(t);i++){//将t中出现的字母的个数存入数组
        hash[t[i]-'a']--;//将和s一样的字母去除
    }
    for(int i=0;i<26;i++){//遍历整个数组,若数组不全为0,则不是字母异位词
        if(hash[i] != 0)
            return false;
    }
    return true;
}

二、349 两个数组的交集

int* intersection(int* nums1, int nums1Size, int* nums2, int nums2Size, int* returnSize) {
    int hash[1001]={0};//创建一个哈希数组存放数组1中出现的数字
    int resultsize = nums1Size<nums2Size?nums1Size:nums2Size;
    int *result  = (int*)calloc(resultsize,sizeof(int));//将两个数组的交集存入result数组
    int k = 0;//result数组的初始下标
    for(int i=0;i<nums1Size;i++){//遍历数组1
        hash[nums1[i]]++;//保存数字
    }
    for(int i=0;i<nums2Size;i++){//遍历数组2
        if(hash[nums2[i]]>0){//数组2中的数字数组1已经出现过
            int num = nums2[i];
            if(hash[num] >= 1){//存在且未被处理
                result[k++] = num;//将数字保存进result数组,并更新下标
                hash[num] = 0;//避免重复计算
            }
        }
    }
    *returnSize = k;
    return result;
}

三、202 快乐数

int getSum(int n){
    int sum =0;
    while(n){
        sum += (n%10)*(n%10);
        n/=10;
    }
    return sum;
}

bool isHappy(int n) {
    int hash[163]={0};//定义一个哈希数组,全部置0
    int sum = getSum(getSum(n));//计算平方和
    int next = sum;//将next作为起点
    while(next!=1){
        sum = getSum(next);
        if(hash[sum])
            return 0;
        hash[sum] = 1;//标记,代表访问过
        next = sum;//这样写能更加快速,不会超出时间限制,我是这样理解的
    }
    return true;
}

这道题其实用c++的set会更好,但是奈何小编的c++还在萌芽阶段,实在没法用set解决,请大家见谅哈,后面小编的C++有了进步还会把这些因为c++错过的题重新练习,补博客的!!! 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值