两个数组的交集,结果不对,大佬帮忙看一下错在哪
问题描述:
各位帮我这个菜鸟看看为什么结果不对
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. 可以先对输入数组排序, 这样会更便于处理重复元素