最近碰到了一個黑客挑戰,在給定的數組中找到了一對int。 使用ArrayList作爲一種方法。 任何人都可以糾正這段代碼中的錯誤。查找ArrayList中的整數對
錯誤:異常在線程 「主」 java.lang.IndexOutOfBoundsException:索引:10,尺寸:9
在java.util.ArrayList.rangeCheck(ArrayList.java:653)
在java的.util.ArrayList.remove(ArrayList.java:492)
在Solution.main(Solution.java:32)
import java.io.*;
import java.util.*;
import java.text.*;
import java.math.*;
import java.util.regex.*;
public class Solution {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int c[] = new int[n];
for(int c_i=0; c_i < n; c_i++){
c[c_i] = in.nextInt();
}
int count=0;
Arrays.sort(c);
ArrayList<Integer> ch = new ArrayList<>();
for(int c_i=0; c_i < n; c_i++){
ch.add(c[c_i]);
}
for(int i=0;i<ch.size();i++){
int a = ch.get(i);
int b=ch.indexOf(a);
if(b<0)
continue;
else{
ch.remove(a);
ch.remove(b);
count++;
for (int j=0;j<ch.size()-2;j++){
ch.add(j,ch.get(j+2));
}
}
System.out.println(count);
}
}
編輯上述方法,雖然發現b
將給出索引a
始終只刪除一個元素,所以現在嘗試了第一個元素被刪除的方法,無論如何,然後搜索匹配的pair元素,直到arrayList爲空。
while(ch.size()!=0){
int a = ch.get(0);
ch.remove(0);
int b = ch.indexOf(a);
if(b<0){
for (int j=0;j<ch.size()-1;j++)
ch.add(j,ch.get(j+1));
continue;
}
else{
ch.remove(b);
count++;
for (int j=0;j<ch.size()-2;j++)
ch.add(j,ch.get(j+2));
}
}
Error: Terminated due to timeout
如果'a = ch.get(i)',什麼停止'b'等於'i'? –
錯誤將發生在此行'ch.remove(a);'因爲在你的程序中'a'可能是一個大於'Arraylist'大小的數字。 – BeginnersSake
從數組中刪除元素的任何其他替代方法,以免妨礙搜索。此外,我正在刪除這些元素,所以它們不會妨礙另一個遞歸對。 –