两个数组的交集
给定两个数组,编写一个函数来计算它们的交集。
示例 1:
输入: nums1 = [1,2,2,1], nums2 = [2,2]
输出: [2]
示例 2:
输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出: [9,4]
思路+代码+注释:
public int[] intersection(int[] nums1, int[] nums2) {
/*
思路:将两个数组倒序排序,然后从开头开始比较元素,如果相同那么记录并且都后移至下一个不同的元素。如果不同那么大的一方后移,直到某个数组移动完为止
*/
sort(nums1,nums1.length);
sort(nums2,nums2.length);
List<Integer> numsList=new ArrayList<>();
int i=0;
int j=0;
while (i<nums1.length && j<nums2.length)
{
if (nums1[i]==nums2[j])
{
numsList.add(nums1[i]);
while (i+1<nums1.length && nums1[i]==nums1[i+1])
{
i++;
}
i++;
while (j+1<nums2.length && nums2[j]==nums2[j+1])
{
j++;
}
j++;
}else if (nums1[i]<nums2[j])
{
while (j+1<nums2.length && nums2[j]==nums2[j+1])
{
j++;
}
j++;
}else {
while (i+1<nums1.length && nums1[i]==nums1[i+1])
{
i++;
}
i++;
}
}
int[] res=new int[numsList.size()];
for (int k = 0; k < numsList.size(); k++) {
res[k]=numsList.get(k);
}
return res;
}
public void sort(int []nums,int n)
{
int tmp;
for (int i=0;i<n;i++)
{
boolean flag=true;
for (int j=0;j<n-1-i;j++)
{
if (nums[j]<nums[j+1])
{
tmp=nums[j];
nums[j]=nums[j+1];
nums[j+1]=tmp;
flag=false;
}
}
if (flag)
{
return;
}
}
}