Leetcode:如何求解两个数组的交集II ?

题目描述:

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

例如:
给定 nums1 = [1, 2, 2, 1]nums2 = [2, 2], 返回 [2, 2].

注意:

  •    输出结果中每个元素出现的次数,应与元素在两个数组中出现的次数一致。
  •    我们可以不考虑输出结果的顺序。

跟进:

  • 如果给定的数组已经排好序呢?你将如何优化你的算法?
  • 如果 nums1 的大小比 nums2 小很多,哪种方法更优?
  • 如果nums2的元素存储在磁盘上,内存是有限的,你不能一次加载所有的元素到内存中,你该怎么办?

我的解法思想:

1.利用两个嵌套for循环,外循环的循环变量i代表第一个数组中元素,内循环的循环变量j代表第二个数组中的元素。

2.若nums1[i]==nums2[j];则将nums2[j]交给新数组A存贮。

3.nums1从i位置起统统将后一个元素往前移动一位,将i位置覆盖。同时令length1--;因为i位置代表新的元素,所以i--,从新比    较i位置的元素。

4.nums2同理,但j不需要j--;因为j每次循环都是从0开始。每个元素在其内部变动对循环无影响。

5.然后break;跳出此次内循环。

代码:

class Solution {
    public static void intersect(int []nums1,int []nums2) {
    int []A=new int[nums1.length];
    int length1=nums1.length;
    int length2=nums2.length;
    int e=0;
    for(int i=0;i<length1;i++) {
    for(int j=0;j<length2;j++) {
    if(nums1[i]==nums2[j]) {
    A[e]=nums2[j];
    e++;
    for(int b=i;b<length1-1;b++) 
    nums1[b]=nums1[b+1];
    length1--;
    for(int m=j;m<length2-1;m++)
    nums2[m]=nums2[m+1];
    length2--;
    i--;
    break;
    }
    }
   
    }
       for(int i=0;i<A.length;i++) {
      if(A[i]!=0)
      System.out.println(A[i]);
      }
        
        }
    public static void main(String []args){
        int []A={1,3,5,4,7,51,9,8,7,4,65,3};
        int B[]={1,1,98,3,564,32,8,65,45,87};
        intersect(A,B);
    }

}

输出结果:

[1,3,8,65]

注意:

            一定要length1=nums1.length和length2=nums2.length。然后再length1--和length2--,不能直接对nums1.length和nums2.length进行自减操作,否则会报错。


猜你喜欢

转载自blog.csdn.net/Z_zfer/article/details/80254691