代码随想录打卡第5天|哈希表基础、242有效字母异位词、349两个数组的交集

本文介绍了哈希表的基本概念,包括哈希函数、哈希碰撞的解决方法(拉链法和线性探测法),以及C语言中的字母异位词判断示例。同时,详细阐述了如何使用C语言实现两个整数数组的交集计算函数intersection1。
摘要由CSDN通过智能技术生成

哈希表的基础

在这里插入图片描述

index = hashFunxtion(name)
hashFunction = hashcode(name) % tablesize大小有限制
//如何保证映射后的元素仍然在哈希表内部呢,需要有一个取模操作

哈希碰撞

在这里插入图片描述

拉链法

其实拉链法就是要选择适当的哈希表的大小,这样既不会因为数组空值而浪费大量内存,也不会因为链表太长而在查找上浪费太多时间。

线性探测法

使用线性探测法,一定要保证tableSize大于dataSize。 我们需要依靠哈希表中的空位来解决碰撞问题。
在这里插入图片描述
在这里插入图片描述

242 有效的字母异位词

在这里插入图片描述

C语言
bool isAnagram(char *s,char *t){
	int len_s = strlen(s), len_t = strlen(t);
	    if (len_s != len_t) {
	        return false;
	    }
	    int table[26];
	    memset(table, 0, sizeof(table));
	    for (int i = 0; i < len_s; ++i) {
	        table[s[i] - 'a']++;
	    }
	    for (int i = 0; i < len_t; ++i) {
	        table[t[i] - 'a']--;
	        if (table[t[i] - 'a'] < 0) {
	            return false;
	        }
	    }
	    return true;
	}
}

在这里插入图片描述

主要思路:

在这里插入图片描述

int* intersection1(int* nums1, int nums1Size, int* nums2, int nums2Size, int* returnSize){

    int nums1Cnt[1000] = {0};
    int lessSize = nums1Size < nums2Size ? nums1Size : nums2Size;
    int * result = (int *) calloc(lessSize, sizeof(int));
    int resultIndex = 0;
    int* tempNums;
    
    int i;

    /* Calculate the number's counts for nums1 array */
    for(i = 0; i < nums1Size; i ++) {
        nums1Cnt[nums1[i]]++;
    }

    /* Check if the value in nums2 is existing in nums1 count array */
    for(i = 0; i < nums2Size; i ++) {
        if(nums1Cnt[nums2[i]] > 0) {
            result[resultIndex] = nums2[i];
            resultIndex ++;
            /* Clear this count to avoid duplicated value */
            nums1Cnt[nums2[i]] = 0;
        }
    }
    * returnSize = resultIndex;
    return result;
}
  • 6
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
可以使用哈希表来解决将字母异位组合在一起的问题。具体的实现如下: ```python def group_anagrams(strs): if not strs: return [] # 创建一个哈希表,用于存储异位组合的结果 anagrams = {} # 遍历每个字符串 for word in strs: # 对字符串进行排序,使得相同的异位排序后变成相同的字符串 sorted_word = ''.join(sorted(word)) # 如果排序后的字符串不在哈希表中,则将其加入哈希表,并以排序后的字符串作为键,创建一个新的列表作为值 if sorted_word not in anagrams: anagrams[sorted_word] = [word] else: # 如果排序后的字符串已经在哈希表中,则将当前字符串加入到对应的列表中 anagrams[sorted_word].append(word) # 将哈希表中的值转换为列表作为最终结果 result = list(anagrams.values()) return result ``` 这里创建了一个哈希表 `anagrams` 来存储异位组合的结果。遍历每个字符串,对字符串进行排序,使得相同的异位排序后变成相同的字符串。然后判断排序后的字符串是否在哈希表中,如果不在,则将其加入哈希表,并以排序后的字符串作为键,创建一个新的列表作为值;如果已经在哈希表中,则将当前字符串加入到对应的列表中。最后将哈希表中的值转换为列表作为最终结果。 你可以调用 `group_anagrams` 函数并传入一个字符串数组来测试它的功能。例如: ```python strs = ["eat", "tea", "tan", "ate", "nat", "bat"] result = group_anagrams(strs) print(result) # 输出:[["eat", "tea", "ate"], ["tan", "nat"], ["bat"]] ``` 这里的字符串数组中有三组字母异位:["eat", "tea", "ate"]、["tan", "nat"] 和 ["bat"]。它们被分组在一起并返回了一个列表。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值