给定两个数组 nums1 和 nums2 ,返回 它们的交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。
示例 1:
输入:nums1 = [1,2,2,1], nums2 = [2,2]
输出:[2]
示例 2:
输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出:[9,4]
解释:[4,9] 也是可通过的
提示:
1 <= nums1.length, nums2.length <= 1000
0 <= nums1[i], nums2[i] <= 1000
最简单思路1:两个for循环对比两数组+去重
时间复杂度较差、但思路很简单
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int* intersection(int* nums1, int nums1Size, int* nums2, int nums2Size, int* returnSize){
int s = 0; //记录交集数组的大小
for(int i=0; i<nums1Size; i++) //遍历数组1
{
for(int j=0; j<nums2Size; j++) //遍历数组2
{
if(nums2[j]==nums1[i]) //判断数组2中是否有值与数组1相同的数
{
int flag = 0; //重复标志,0--未重复,1--重复
//为节省空间,我们将交集放入数组1中
for(int k = 0; k < s; k++) //遍历交集数组
{
if(nums1[k]==nums2[j]) //判重
{
flag = 1; //重复
}
}
if(!flag){
nums1[s++] = nums2[j]; //不重复,交集元素存入数组1中
}
}
}
}
(* returnSize) = s; //将交集数组实际大小赋值给形参
int * num = (int*)malloc(sizeof(int*)*s); //为交集数组num申请内存空间
for(int i=0; i<s; i++){ //将数组1中的交集元素赋值给交集数组num
num[i] = nums1[i];
}
return num; //返回交集数组指针
}