前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >leecode刷题(6)-- 两个数组的交集II

leecode刷题(6)-- 两个数组的交集II

作者头像
希希里之海
发布2019-01-03 14:54:45
3470
发布2019-01-03 14:54:45
举报
文章被收录于专栏:weixuqin 的专栏weixuqin 的专栏

leecode刷题(6)-- 两个数组的交集II

两个数组的交集II

描述:

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

示例:

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

说明:

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

思路:

我们可以用遍历穷举的方法,但是时间复杂度肯定很高。不妨换个思路:先将数组递增排序,排序之后将两个数组同时遍历(定义两个数组的脚本变量,初始值为0,向后遍历),比较同索引位置的元素是否相等,如果相等,则记录下该值;如果不相等,将值较小的数组的脚标加1,另一个数组的脚标等待。然后继续遍历比较,直到遍历完短的数组。

代码如下:

代码语言:javascript
复制
import java.util.Arrays;

public class Intersect {
    public int[] intersect (int[] nums1, int[] nums2) {

        if (nums1 == null || nums2 == null || nums1.length == 0 || nums2.length == 0) {
            return new int[]{};
        }

        Arrays.sort(nums1);
        Arrays.sort(nums2);

        int i = 0, j = 0, k = 0;
        int[] result = new int[Math.min(nums1.length, nums2.length)];
        while (i < nums1.length && j < nums2.length) {
            if (nums1[i] == nums2[j]) {
                result[k++] = nums1[i];
                i++;
                j++;
                continue;
            } else if (nums1[i] > nums2[j]) {
                j++;
            } else {
                i++;
            }
        }

        return Arrays.copyOf(result, k);    //拷贝数组
    }

    public static void main(String[] args) {
        int[] nums1 = {1,2,2,1};
        int[] nums2 = {2,2};
        Intersect intersect = new Intersect();
        int[] result = intersect.intersect(nums1, nums2);
        //Arrays.toString()方法将hash值转为数组
        System.out.println(Arrays.toString(result));
    }
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-12-30 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • leecode刷题(6)-- 两个数组的交集II
    • 两个数组的交集II
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档