思路:
这个题目是查找交集,考虑用哈希数组,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;
}