Leetcode349.两个数组的交集

Leetcode349.两个数组的交集

1.题目描述

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

示例 1:

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

输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出: [9,4]

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

2.解答

本来这道题目是属于二分查找范围的,一开始有两个比较容易实现的方法我就直接略过了,一直在思考如何使用二分查找求解,因为两个数组是无序的,如果一定要强行使用的话,那么就需要对一个数组进行排序,如果使用快速排序,那么时间复杂度为O(nlogn),然后再将另外一个数组的元素依次进行二分查找,不过我觉得这个方法有点为了二分而二分了,最后选择看题解,没想到他喵的题解里面都是前面那两个比较幼稚的方法,好吧,这里做一个快速的实现:

class Solution {
    public int[] intersection(int[] nums1, int[] nums2) {
        HashSet<Integer> set = new HashSet<>();
        for(int i : nums1)   set.add(i);
        List<Integer> list = new ArrayList<>();
        for(int i : nums2){
            if(set.contains(i) && !list.contains(i))
                list.add(i);
        }
        int[] output = new int[list.size()];
        for(int i = 0;i < list.size();i++){
            output[i] = list.get(i);
        }
        return output;
    }
}

这样的问题也是有价值的,可以当作一个对api熟悉的过程,例如在这道题目中将集合转变为数组的过程,本来我想要使用这种方法:
int[] arr = (int[])list.toArray();
但是程序抛出异常,我一想,咦,toArray()方法返回的不应该是Object类型嘛,做一个强转怎么了,查看api发现:
image.png
这个方法返回的是一个Object数组,你将一个Onject[]强行赋值给int[],肯定会出错的啊,谁教你这样做了啊,康师傅嘛?啥也不是,散会