LeetCode349两个数组的交集
思路:
这个题目是查找交集,考虑用哈希数组,c语言用数组建立哈希表来解题,题目限定了数组长度在1000以内,那么可以设定一个result数组用于存储交集
1.我们需要将nums1映射到哈希表中
2.遍历nums2查询哈希表中是否存在该元素,若存在,则将该元素写进result中,并将哈希表对应值改为0,避免重复录入
3.输出result
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int* intersection(int* nums1, int nums1Size, int* nums2, int nums2Size, int* returnSize)
{
//1.将nums1映射到哈希表中
int hash[1001]={0};
int resultsize=nums1Size>nums2Size?nums2Size:nums1Size;//设置结果数组长度
int *result=(int *)malloc(resultsize*sizeof(int));//初始化结果数组
int k=0;
for(int i=0;i<nums1Size;i++)
{
//将hash数组中下标为nums1元素值的元素值记录为1,用于记录nums1的数存在情况
hash[nums1[i]]=1;
}
//2.nums2遍历查询是否出现
for(int i=0;i<nums2Size;i++)
{
//如果哈希数组中存在nums2中的元素,则++
if(hash[nums2[i]]>0)
{
result[k++]=nums2[i];
//将元素加入结果集合后将哈希数组对应位置置为0防止重复添加
hash[nums2[i]]=0;
}
}
//设置返回数组的大小为k,即有效值
*returnSize=k;
return result;
}