Вы можете назначить массив следующим образом:
@SuppressWarnings("unchecked")
T[] arrCopy = (T[]) Array.newInstance(a.getClass().getComponentType(), high-low);
Хотя необязательное предупреждение необходимо, это на самом деле должно быть безопасно.
Кстати, если вы хотите найти самый большой элемент вмассив, вот один onininer:
public static <T extends Comparable<T>> T max(final T[] data) {
return Collections.max(Arrays.asList(data));
}
Для решения полной проблемы вы можете использовать один из этих двух (они эквивалентны):
public static <T extends Comparable<T>> T maxA(final T[] data,int from, int to) {
return Collections.max(Arrays.asList(Arrays.copyOfRange(data, from, to)));
}
public static <T extends Comparable<T>> T maxB(final T[] data,int from, int to) {
return Collections.max(Arrays.asList(data).subList(from, to));
}