区間木を作ろうとしています。このパートでは、すべての左側のエンドポイントを昇順で、すべての右側のエンドポイントを昇順で取得し、それらを単一のポイントのリストに配置する必要があります(重複はありません)。ただし、適切なエンドポイントをポイントリストにマージしようとすると、indexOutOfBounds例外が発生し続けます。これが起こらないように容量を確保しましたが、とにかく起こります。ここで何がわからないのですか?
public static ArrayList<Integer> getSortedEndPoints(ArrayList<Interval> leftSortedIntervals, ArrayList<Interval> rightSortedIntervals) {
ArrayList<Integer> result = new ArrayList<Integer>();
for (int i = 0 ; i < leftSortedIntervals.size() ; i++ ) {
if (i >= 1 && leftSortedIntervals.get(i-1).leftEndPoint != leftSortedIntervals.get(i).leftEndPoint ) {
result.add(leftSortedIntervals.get(i).leftEndPoint);
}
else if (i == 0) {
result.add(leftSortedIntervals.get(i).leftEndPoint);
}
}
result.ensureCapacity(rightSortedIntervals.size()*2);
for (int j = 0 ; j < rightSortedIntervals.size(); j++) {
boolean duplicate = false;
int size = result.size()-1;
int temp = rightSortedIntervals.get(j).rightEndPoint;
while (size >= 0 && result.get(size) >= rightSortedIntervals.get(j).rightEndPoint ) {
if (result.get(size) == rightSortedIntervals.get(j).rightEndPoint) {
duplicate = true;
break;
}
else {
result.set(size+1, result.get(size));
size--;
}
}
if (duplicate = true) {
continue;
}
else {
result.add(size, temp);
}
}
return result;
}
次の行でエラーが発生します。
else {
result.set(size+1, result.get(size));
size--;
}