【发布时间】:2021-11-28 02:28:49
【问题描述】:
这是我从三个数组中查找共同元素的代码。 我正在尝试使用 add() 函数在 ArrayList 中添加元素,但出现内存不足错误。 这是我的代码-
ArrayList<Integer> commonElements(int A[], int B[], int C[], int n1, int n2, int n3)
{
// code here
ArrayList<Integer> ls=new ArrayList<Integer>(n1);
int i=0,j=0,k=0;
while(i<n1 && j<n2 && k<n3){
if(A[i]==B[j] && B[j]==C[k]){
int t=A[i];
ls.add(t);
}else if(A[i]<B[j]){
i++;
}else if(B[j]<C[k]){
j++;
}else{
k++;
}
}
return ls;
}
这是我的错误-
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.base/java.util.Arrays.copyOf(Arrays.java:3720)
at java.base/java.util.Arrays.copyOf(Arrays.java:3689)
at java.base/java.util.ArrayList.grow(ArrayList.java:237)
at java.base/java.util.ArrayList.grow(ArrayList.java:242)
at java.base/java.util.ArrayList.add(ArrayList.java:485)
at java.base/java.util.ArrayList.add(ArrayList.java:498)
at Solution.commonElements(GFG.java:68)
at GFG.main(GFG.java:36)
【问题讨论】:
-
使用调试器单步调试您的代码,您会发现问题所在。在您向列表中添加项目的情况下,哪些循环索引变量会增加?
-
当所有元素相等时,将其添加到输出并再次迭代。由于您不更改 i、j 或 k,因此元素仍然相同,并且您再次添加相同的元素。又一次。