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; }
  • 相关阅读:
    如何在Windows下安装sass和compass
    HTTP 请求头中的 X-Forwarded-For
    HTTP 代理原理及实现
    node.js使用经验记录
    完美方案——iOS的WebView自适应内容高度
    购物车商品加减效果
    C++17新特性
    栈实现迷宫求解(c++版)
    二叉树遍历及实现
    经典乱码“烫烫烫”和“屯屯屯”
  • 原文地址:https://www.cnblogs.com/dloading/p/10712649.html
Copyright © 2011-2022 走看看