两个数组的交集,结果不对,大佬帮忙看一下错在哪

两个数组的交集,结果不对,大佬帮忙看一下错在哪

问题描述:

各位帮我这个菜鸟看看为什么结果不对图片说明

class Solution {
    public int[] add(int[] nums,int i){
        int[] num=new int[nums.length+1];
        for(int j=0;j<nums.length;j++)
            {num[j]=nums[j];}
        num[nums.length]=i;
        nums=num;
        return nums;
    }
    public int[] intersection(int[] nums1, int[] nums2) {
        int[] nums=new int[0];
        for(int i=0;i<nums1.length;i++)
            for(int j=0;j<nums2.length;j++){
                if(nums.length==0){
                    if(nums1[i]==nums2[j])
                            {
                            Solution solution=new Solution();
                            nums=solution.add(nums,nums1[i]);
                            }
                    }else{
                        for(int x=0;x<nums.length;x++)
                        {
                        if(nums1[i]==nums2[j]&&nums[x]!=nums1[i])
                            {
                            Solution solution=new Solution();
                            nums=solution.add(nums,nums1[i]);
                            }
                        }
                }
            }
        return nums;
    }
}

以下是结果

图片说明

用 HashSet 类型来判断,先将一个数组元素加入其中,然后遍历另一个数组,用 Set 的 contains 判断是否存在,如果存在,就是交集了,存储起来。

你没有考虑同一个集合内的重复的问题,要都判断去重。

结果不对主要是因为没有考虑集合元素重复的场景。其次你这样些程序不符合一般思路, 导致代码写起来异常场景就不好处理了, 初略看了一下, 给你大概有几点建议
1 .add函数给数组追加元素的方式比较浪费资源,且不方便。建议用java的 ArrayList 存储数组, ArrayList.add追加元素
2. 在你调用同一各类的add 方法是, 不需要创建新对象Solution, 可以直接调用
3. 可以先对输入数组排序, 这样会更便于处理重复元素