哈希表的基础
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;
}