最近遇到了一个hackerrank挑战,得到了一个给定数组中的int对。 使用ArrayList作为一种方法。 任何人都可以纠正此代码中的错误。
错误:线程“main”中的异常java.lang.IndexOutOfBoundsException:Index:10,Size:9
at java.util.ArrayList.rangeCheck(ArrayList.java:653)
at 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
答案 0 :(得分:1)
var result = AddUpdateMailChimp().Result;
这将检索位置i
的值int a = ch.get(i);
这将删除存储在索引ch.remove(a);
的值。值a
可能大于ArrayList大小。
这是你出错的地方。尝试评论一下,也许它会起作用
答案 1 :(得分:0)
df = df.set_index('Date')
df.columns = df.columns.str.split(' at ',expand=True)
df1 = df.stack()
idx = pd.to_datetime(df1.index.get_level_values(0) + ' ' + df1.index.get_level_values(1))
df1 = df1.set_index(idx).rename_axis('Timestamp')
print (df1)
#Cust Items/Cust Ttl Items
Timestamp
2018-01-01 00:00:00 2 4 8
2018-01-01 01:00:00 1 5 5
2018-01-01 23:00:00 3 3 9
2018-01-02 00:00:00 2 5 10
2018-01-02 01:00:00 1 5 5
2018-01-02 23:00:00 3 4 12