350-两个阵列的交叉点II

时间:2019-04-15
本文章向大家介绍350-两个阵列的交叉点II,主要包括350-两个阵列的交叉点II使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

给定两个数组,编写一个函数来计算它们的交集。 

例1: 输入: nums1 = [1,2,2,1],nums2 = [2,2]  输出:[2,2]

例2: 输入: nums1 = [4,9,5],,nums2 = [9,4,9,8,4]  输出:[4,9]

注意: 结果中的每个元素应该出现在两个数组中显示的次数。 结果可以是任何顺序。 跟进: 如果给定的数组已经排序怎么办?你会如何优化算法? 如果nums1的尺寸与nums2的尺寸相比较小怎么办?哪种算法更好? 如果nums2的元素存储在磁盘上,并且内存有限,以致您无法一次将所有元素加载到内存中,该怎么办?

使用Arrays.sort()直接对数组进行排序。然后设置两个排序完成的数组的光标从零开始移动。当nums1中的值跟nums2中的值相等时,将数值加到ArrayList对象中,
两个数组光标同时向后移动。若第一个数组的值<第二个数组的值,第一个数组光标向后移动,若第一个数组的值>第二个数组的值,第二个数组光标向后移动。 public int[] intersect(int[] nums1, int[] nums2) { int m=nums1.length,i=0; int n=nums2.length,j=0; Arrays.sort(nums1); Arrays.sort(nums2); List list=new ArrayList(); while(i<m&&j<n) { if (nums1[i]==nums2[j]) { list.add(nums1[i]); i++;j++; }else if (nums1[i]<nums2[j]) { i++; }else { j++; } } int k=0; int B[]=new int[list.size()]; Iterator iterator=list.iterator(); while (iterator.hasNext()) { int a= (int) iterator.next(); B[k]=a; k++; } return B; }