版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_39360985/article/details/83692631
给定两个数组,编写一个函数来计算它们的交集。
示例 1:
输入: nums1 = [1,2,2,1], nums2 = [2,2]
输出: [2,2]
示例 2:
输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出: [4,9]
说明:
- 输出结果中每个元素出现的次数,应与元素在两个数组中出现的次数一致。
- 我们可以不考虑输出结果的顺序。
题目分析:
与两个数组的交集相比,此题求出的两个数组的交集不能消除重复元素,求出的是真正数学意义上的交集,所以不能用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; }
主函数:
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] + " "); } }
运行结果:
4 9
2 2