1.题目描述
2.思路讲解
乍一看这题好像挺简单,但我写的时候也出现了很多问题。终究还是自己太菜了。
我最后是使用的哈希表来解决,因为测试用例中没有出现负数,所以可行(对我来说),创建两个哈希表,最后值只要不为0就代表一定为交集
3.代码实现
int* intersection(int* nums1, int nums1Size, int* nums2, int nums2Size, int* returnSize){
//创建两个哈希表
int hamps1[1000];
int hamps2[1000];
//跑一遍,让里面的数全为0
for(int i=0;i<1000;i++)
{
hamps1[i]=0;
hamps2[i]=0;
}
//指定位置赋值
for(int i=0;i<nums1Size;i++)
{
hamps1[nums1[i]]++;
}
for(int i=0;i<nums2Size;i++)
{
hamps2[nums2[i]]++;
}
//要一个合适长度的数组
int maxlong=0;
if(nums1Size>nums2Size)
{
maxlong=nums1Size;
}
else
{
maxlong=nums2Size;
}
int *array=malloc(sizeof(int)*maxlong);
//然后遍历哈希表就行,只要相同位置数不为0,就代表一定有交集
int count=0;
for(int i=0;i<1000;i++)
{
if(hamps1[i]!=0&&hamps2[i]!=0)
{
array[count]=i;
count++;
}
}
*returnSize=count;
return array;
}
4.总结
昨天期末考试结束,看了一晚上c++,结果回了宿舍没有控制住自己,和舍友吹了一晚上牛逼。
导致这个题昨天一晚上也没做出来,罪过罪过