版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.youkuaiyun.com/qq_39360985/article/details/83692631
给定两个数组,编写一个函数来计算它们的交集。
示例 1:
输入: nums1 = [1,2,2,1], nums2 = [2,2]
输出: [2,2]
- 1
- 2
示例 2:
输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出: [4,9]
- 1
- 2
说明:
- 输出结果中每个元素出现的次数,应与元素在两个数组中出现的次数一致。
- 我们可以不考虑输出结果的顺序。
题目分析:
与两个数组的交集相比,此题求出的两个数组的交集不能消除重复元素,求出的是真正数学意义上的交集,所以不能用hashSet()来存储了,只能用普通的数组来存储元素;利用排序,将两个数组元素从小到大排序,然后从两个数组的开始位置比较,如果两个位置上的元素相等,就将此元素加入存储结果的数组中。
代码实现:
public int[] intersect(int[] nums1, int[] nums2) { Arrays.sort(nums1); Arrays.sort(nums2);
ArrayList<Integer> list = new ArrayList();
int i = 0, j = 0;
while (i < nums1.length && j < nums2.length)
{
if (nums1[i] < nums2[j])
i++;
else if (nums1[i] > nums2[j])
j++;
else
{
list.add(nums1[i]);
i++;
j++;
}
}
int[] nums = new int[list.size()];
for (int k = 0; k < nums.length; k++)
{
nums[k] = list.get(k);
}
return nums;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
主函数:
public static void main(String[] args) { S2 s = new S2(); int[] a = s.intersect(new int[]{4,9,5}, new int[]{9,4,9,8,4}); for (int i = 0; i < a.length; i++) { System.out.print(a[i] + " "); } System.out.println(); int[] b = s.intersect(new int[]{1,2,2,1}, new int[]{2,2}); for (int i = 0; i < b.length; i++) { System.out.print(b[i] + " "); } }
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
运行结果:
4 9
2 2
</div>
<link href="https://csdnimg.cn/release/phoenix/mdeditor/markdown_views-7f770a53f2.css" rel="stylesheet">
</div>
249





