网站发稿平台,周村网站制作哪家好,国内有做外汇的正规网站吗,网站怎么做按钮题目 给定两个数组 nums1 和 nums2 #xff0c;返回 它们的交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。 难度#xff1a;简单 题目链接#xff1a;349.两个数组的交集 示例 1#xff1a;
输入#xff1a;nums1 [1,2,2,1], nums2 [2,…题目 给定两个数组 nums1 和 nums2 返回 它们的交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。 难度简单 题目链接349.两个数组的交集 示例 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 10000 nums1[i], nums2[i] 1000
思路解析
根据题目的意思就是求出两个数组的交集,返回两个数组都包含的元素。
下方代码的方法就是 用两层for循环来比较nums1和nums2两个数组中相同的元素然后把相同的元素通过创建一个临时数组存放与下标与之对应的元素 ( 前提是先把来临时数组需要用到元素初始化为-1 原因是方便以后的数组遍历)。
最后遍历临时数组把不是-1的元素放到返回数组中。
代码展示
/*** Note: The returned array must be malloced, assume caller calls free().*/int tmp[1001] {0};//创建临时数组
int* intersection(int* nums1, int nums1Size, int* nums2, int nums2Size, int* returnSize){int * arr (int*)malloc(sizeof(int)*nums1Size);int i 0;int j 0;int x 0;//把数组所有元素全部初始化为-1for(i 0;i1000;i){tmp[i] -1;}for(i 0;inums1Size;i){for(j 0;jnums2Size;j){if(nums1[i] nums2[j])//把对应的元素放到相应的数组下标{x nums1[i]%1001;tmp[x] x; }}}j 0;for(i 0;i1000;i){if(tmp[i] ! -1){arr[j] tmp[i];}}*returnSize j;return arr;
}
【详细解析】
如果只看思路解析的话那么我们想的是应该怎木写代码呢先在函数外创建一个临时的数组然后在函数内部使用malloc使用动态内存分配一个返回数组。
然后使用一个for循环先把临时数组里面的元素置成 - 1因为数组存储元素的数字的范围是[ 01000]。
接着用两层for循环进行判断两个数组是否相同的元素即数组元素的交集在内层的for循环里面使用一个if语句进行判断如果找到两个数组元素的交集我们就先把元素放到临时数组tmp[]相应的位置。 x nums1[i]%1001;tmp[x] x;
当放到临时数组后还需要把临时数组中元素不等于-1的元素放到返回数组中。 if(tmp[i] ! -1){arr[j] tmp[i];} 接着就是返回 返回数组的元素的个数 和 返回 返回数组首元素的地址。 *returnSize j;//返回数组的大小return arr;//返回数组首元素的地址