我是靠谱客的博主 受伤芹菜,最近开发中收集的这篇文章主要介绍数组-两个数组的交集(两个集合),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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

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

说明:
输出结果中的每个元素一定是唯一的。
我们可以不考虑输出结果的顺序。

思路:
计算两个数组的交集,直观的方法是遍历数组 nums1,对于其中的每个元素,遍历数组 nums2 判断该元素是否在数组 nums2 中,如果存在,则将该元素添加到返回值。
假设数组 nums1 和 nums2 的长度分别是 mm 和 nn,则遍历数组 nums1 需要 O(m) 的时间,判断 nums1 中的每个元素是否在数组 nums2 中需要 O(n)的时间,因此总时间复杂度O(mn)

如果使用哈希集合存储元素,则可以在 O(1)的时间内判断一个元素是否在集合中,从而降低时间复杂度

首先使用两个集合分别存储两个数组中的元素,然后遍历较小的集合,判断其中的每个元素是否在另一个集合中,如果元素也在另一个集合中,则将该元素添加到返回值。该方法的时间复杂度可以降低到 O(m+n)

Java代码实现:

class Solution {
public int[] intersection(int[] nums1, int[] nums2) {
//建立两个集合
Set<Integer> set1 = new HashSet<>();
Set<Integer> set2 = new HashSet<>();
//将数组元素放入两个集合中
for(int i:nums1){
set1.add(i);
}
for(int i:nums2){
if(set1.contains(i)){
set2.add(i);
}
}
//建立一个数组用来存放元素并返回
int [] arr = new int[set2.size()];
int j = 0;
for(int i:set2){
arr[j++] = i;
}
return arr;
}
}

最后

以上就是受伤芹菜为你收集整理的数组-两个数组的交集(两个集合)的全部内容,希望文章能够帮你解决数组-两个数组的交集(两个集合)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(47)

评论列表共有 0 条评论

立即
投稿
返回
顶部