一.java
/*
HashSet类:不允许有重复元素的集合。允许有 null 值,无序的。
add():添加元素。重复的元素不会被添加。
contains():判断元素是否存在于集合当中
remove() :删除集合中的元素
clear():删除集合中所有元素
size():计算 HashSet 中的元素数量
*/
class Solution
{
public int[] intersection(int[] nums1, int[] nums2)
{
Set<Integer> set1 = new HashSet<>();
Set<Integer> set2 = new HashSet<>();
for(int i:nums1)
{
set1.add(i);
}
for(int i:nums2)
{
if(set1.contains(i))
{
set2.add(i);
}
}
int[] arr = new int[set2.size()];
int j = 0;
for(int i:set2)
{
arr[j++] = i;
}
return arr;
}
}
二.双指针
int cmp(void* a, void* b)
{
return *(int*)a - *(int*)b;
}
int* intersection(int* nums1, int nums1Size, int* nums2, int nums2Size, int* returnSize) {
qsort(nums1, nums1Size, sizeof(int), cmp);
qsort(nums2, nums2Size, sizeof(int), cmp);
*returnSize = 0;
int index1 = 0, index2 = 0;
int* intersection = malloc(sizeof(int) * (nums1Size + nums2Size));
while (index1 < nums1Size && index2 < nums2Size)
{
int num1 = nums1[index1], num2 = nums2[index2];
if (num1 == num2)
{
// 保证加入元素的唯一性
if (!(*returnSize) || num1 != intersection[(*returnSize) - 1]) {
intersection[(*returnSize)++] = num1;
}
index1++;
index2++;
}
else if (num1 < num2)
{
index1++;
}
else
{
index2++;
}
}
return intersection;
}