leetcode刷题--基础数组--两个数组的交集(C)

  1. 给定两个数组,编写一个函数来计算它们的交集。
    示例 1:
    输入: nums1 = [1,2,2,1], nums2 = [2,2]
    输出: [2,2]
    示例 2:
    输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4]
    输出: [4,9]
    说明:输出结果中每个元素出现的次数,应与元素在两个数组中出现的次数一致。我们可以不考虑输出结果的顺序。

思想:(1)将两个数组进行排序O(nlgn)然后依次O(n)比较转存。时间复杂度为O(nlgn),空间复杂度为O(1), 但破坏了原数组。排序函数一般使用各语言自带的函数效率较高,所以这边我默认为两个数组已经排序完成。

int intersect(int* nums1, int nums1Size, int* nums2, int nums2Size){
	int i=0, j=0;
	int count=0;
	if(nums1Size nums2[j])
			j++;
		else
			i++;
	}
	return count;
} 

(2)暴力解法。直接用短数组为基准,将其中的元素一个个拿出来跟长数组中的元素比较,如果相同则存储,并且将该元素所在长数组的位置做标记,避免重复。时间复杂度O(n^2),空间复杂度O(n),如果不想使用空间可以在原长数组中进行修改,改成不可比较的值,这样会破坏原数组。

tersect(int* nums1, int nums1Size, int* nums2, int nums2Size) {
    int count = 0;
    if(nums1Size

(3)哈希表。把两个数组A和B都遍历到一个新的数组里,然后在统计重复的数字即可,这个时间复杂度就是O(n),空间复杂度O(m)。这个要求数组内数字的范围是已知并且不是很大。同样的在JAVA里面有HashMap。

你可能感兴趣的:(leetcode刷题)