350.两个数组的交集II
链接:350.两个数组的交集II
难度:Easy
标签:数组、哈希表、双指针、二分查找、排序
简介:给定两个数组,编写一个函数来计算它们的交集。
题解 1 - typescript
- 编辑时间:2020-07-13
- 执行用时:76ms
- 内存消耗:37.1MB
- 编程语言:typescript
- 解法介绍:利用 map 来储存 num 和显示次数。
function intersect(nums1: number[], nums2: number[]): number[] {
const map = new Map();
const ans: number[] = [];
for (const num of nums1) {
const c = map.get(num);
map.set(num, 1 + (c ? c : 0));
}
for (const num of nums2) {
const c = map.get(num);
if (c) {
ans.push(num);
map.set(num, c - 1);
}
}
return ans;
}
题解 2 - c
- 编辑时间:2021-11-30
- 执行用时:8ms
- 内存消耗:6.2MB
- 编程语言:c
- 解法介绍:二分查找。
int comp(const void *a, const void *b) {
return *(int *)a - *(int *)b;
}
int* intersect(int* nums1, int nums1Size, int* nums2, int nums2Size, int* returnSize){
qsort(nums2, nums2Size, sizeof(int), comp);
qsort(nums1, nums1Size, sizeof(int), comp);
int i1 = 0, i2 = 0, *ans = (int *)malloc(sizeof(int) * nums1Size);
*returnSize = 0;
while (i1 < nums1Size && i2 < nums2Size) {
if (nums1[i1] == nums2[i2]) {
ans[(*returnSize)++] = nums1[i1];
i1++;
i2++;
continue ;
} else if (nums1[i1] > nums2[i2]) {
i2++;
} else {
i1++;
}
}
return ans;
}