题目一:两个数组的交集

int* intersection(int* nums1, int nums1Size, int* nums2, int nums2Size, int* returnSize){
//哈希表
int arr_hash[1000] = {0};
int *arr_result = (int *)malloc(sizeof(int)* nums1Size);
*returnSize = 0;
for(int i = 0;i < nums1Size;i++){
arr_hash[nums1[i]] =1;//这儿一定赋值1?
}
for(int i = 0;i < nums2Size;i++){
if(arr_hash[nums2[i]]>0){
arr_result[(*returnSize)++] = nums2[i];
arr_hash[nums2[i]]--;
}
}
return arr_result;
}
哈希表用法 26个字母出现次数,刚开始全都赋值为-1,后面出现了改变值;

int maxLengthBetweenEqualCharacters(char * s){
int maxLen = -1;//开始为-1
int firstIndex[26];//初始化为-1 表示还未出现
memset(firstIndex, -1, sizeof(firstIndex)); // 这儿赋值只能用memset 不能直接全部赋-1 是编译器的问题?
int len = strlen(s);
for (int i = 0; i < len; i++) {
if (firstIndex[s[i]- 'a'] < 0) {//未出现
firstIndex[s[i] - 'a'] = i;// 首次出现的下标
} else {
maxLen = fmax(maxLen, i - firstIndex[s[i] - 'a'] - 1);// 第二次出现的下标和第一次 做差
}
}
return maxLen;
}