算法刷题 DAY5

有效的字母异位词

bool isAnagram(char* s, char* t) {
    int hash[26]={0};
    int i=0;
   while(s[i]!='\0'){
hash[s[i]-'a']++;
//printf("  %d||%d",hash[s[i]-'a'],s[i]-'a');//测试
i++;
    }
   // printf("\n");//测试
    i=0;
     while(t[i]!='\0'){
         printf("  %c",t[i]);
hash[t[i]-'a']--;
//printf("  %d||%d",hash[s[i]-'a'],s[i]-'a');//测试
i++;
    }

    for(i=0;i<26;i++){
        //printf("  %d",hash[i]);//测试
        if(hash[i]!=0) return false;
    }

    return true;//必须小写
}

349. 两个数组的交集

//交集是去重之后的
//数组1用于制作哈希表,数组2查询哈希表
//范围大(上亿等)→用set,用数组会开辟大量空间很浪费
//数值小于1000→用数组

/**
 * Note: The returned array must be malloced, assume caller calls free().
 */
int* intersection(int* nums1, int nums1Size, int* nums2, int nums2Size,
                  int* returnSize) {
    int hash[1000] = {0};
    int* result = (int*)calloc(1000, sizeof(int));
    int result_index = 0;

    for (int i = 0; i < nums1Size; i++) {
        hash[nums1[i]] = 1;//制作哈希表
    }
    for (int i = 0; i < nums2Size; i++) {
        if (hash[nums2[i]] == 1) {//查询哈希表
            result[result_index++] = nums2[i];
            hash[nums2[i]] = 0;//去重
        }
    }

    *returnSize = result_index;//返回结果数组大小

    return result;
}

你可能感兴趣的:(算法,哈希算法,c语言)