代码随想录算法训练营第六天 | Leetcode242.有效的字母异位词、Leetcode349.两个数组的交集、Leetcode202.快乐数、Leetcode1.两数之和

题目链接:242. 有效的字母异位词 - 力扣(LeetCode)

之前有做过这道题,大致知道怎么做,但是实现起来还是存在一点问题的,不过今天有自己调试debug的过程

思路:用哈希数组先遍历s字符串,以这个元素的值做下标,它出现过几次,哈希数组中的值就是多少。再遍历一次t字符串,在哈希数组中寻找以每个元素的值做下标的哈希数组元素,出现了几次就减几次,最后哈希数组中的元素都是0的话,那么这两个字符串就是有效字母异位词。

代码复现:

bool isAnagram(char * s, char * t){
    int sl,tl 
    int cnt[10000] = {0};
    sl = strlen(s), tl = strlen(t);
    //如果长度不相等说明一个长一个短显然不满足条件
    if(sl != tl){
        return false;
    }
    //遍历s
    for(int i = 0; i < sl; i++){
        cnt[s[i] - 'a']++;
    }
    //遍历t同时进行判断
    for(int i = 0; i < sl; i++){
        cnt[t[i] - 'a']--;
        if(t[i] - 'a'] < 0)
            return false;
    }
        return true;
    //或者先遍历完t再进行判断
/*  for(int i = 0; i < sl; i++){
        cnt[t[i] - 'a']--;
    }
    //一定一定要注意这里的判断长度是26,而不是s的长度后者t的长度
    for(int i = 0; i < 26; i++){
        if(cnt[i] != 0)
            return false;
    }
        return true;
*/
}
    

题目链接:349. 两个数组的交集 - 力扣(LeetCode)

3!2!1!上链接!

代码复现:

int* intersection(int* nums1, int nums1Size, int* nums2, int nums2Size, int* returnSize){
     //最后返回的交集的长度肯定是短一点的那个数组长度 
     int l = nums1Size > nums2Size ? nums2Size : nums1Size;  
     int *result = (int*)calloc(l,sizeof(int));
     int *cnt[10000] = {0};
     int index = 0;   
     //出现过的数它们自己的数值作为下标
     for(int i = 0; i < nums1Size; i++){
        cnt[nums1[i]]++;
     }
     for(int i = 0; i < nums2Size; i++){
       //如果这个数出现过 
       if(cnt[nums2[i]] > 0 ){
           //那么就在添加结果数组中,
            result[index++] = nums2[i];
           //添加过后就将标记数组中的这个数标记为0,意味着已经判断过了
            cnt[nums2[i]] = 0;
        }
    }
    //我不知道为什么要有这个,让我打日志打日志 我还没学会!!    
    *returnSize= index;
        return result;
}
        

题目链接:202. 快乐数 - 力扣(LeetCode)

需要注意到的是:在计算过程中,一旦这个sum出现过,那么它就会无限循环下去,一定就不是快乐数了

代码复现:

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

bool isHappy(int n){
    int visited[10000] = {0};
    int sum = getsum(n);
        while(1){
            if(sum== 1)
          return true;
             else if (sum != 1)
          return false;
             else
                visited[sum]++;
            sum = getsum(sum);
/*        写好一点
        while(sum != 1){
            if(visited[sum] == 1){
                return false;
            }
            else{
                visited[sum] = 1;
            }
            sum = getsum(sum);
        }
            return true;
    }              
}
        

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值