zoukankan      html  css  js  c++  java
  • 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; }
  • 相关阅读:
    表单重复提交问题
    Win8.1卸载64位Oracle Database 11g的详细图文步骤记录
    A1084. Broken Keyboard (20)
    A1088. Rational Arithmetic (20)
    A1089. Insert or Merge (25)
    A1034. Head of a Gang (30)
    A1013. Battle Over Cities (25)
    A1030. Travel Plan (30)
    A1003. Emergency (25)
    A1076. Forwards on Weibo (30)
  • 原文地址:https://www.cnblogs.com/dloading/p/10712649.html
Copyright © 2011-2022 走看看