问题描述:给定两个数组,编写一个函数来计算他们的交集。
map求解:先将第一个数组保存在map中,再遍历第二个nums2,如果nums2[index]在map中存在,且值不为0,则减去map中键为nums2[index]的值,并加入交集nums3中。
public List<Integer>?intersec(int []nums1,int []nums2)
{
Map<Integer,Integer>map=new HashMap<>();
for(int i=0;i<nums1.length;i++)
{
map.put(nums1[i],map.getOrDefault(nums1[i],0)+1);
}
List<Integer>list=new LinkedList<>();
for(int i=0;i<nums2.length;i++)
{
if(map.containsKey(nums2[i])&&map.get(nums2[i])>0)
{
list.add(nums2[i]);
map.put(nums2[i],map.getOrDefault(nums2[i],0)-1);
}
}
???????return list;
}
双指针求解:首先将两个数组进行排序,并让指针1指向第一个数组的第一个元素,并让指针2指向第二个数组的第二个元素。
public List<Integer> intersect(int []nums1,int []nums2)
{
Arrays.sort(nums1);
Arrays.sort(nums2);
int index1=0;
int index2=0;
List<Integer>list=new LinkedList<>();
while(index1<nums1.length&&index2<nums2.length)
{
if(nums1[index1]==nums2[index2])
{
list.add(nums1[index]);
}else if(nums1[index1]>nums2[index2])
{
index2++;
}else
{
index1++;
}
}
???????return list;
}