我想知道如何使用Java尽可能简单地完成这项任务:
例如,我有一个包含这些数字的列表:
[3,2,8,9]
拼出:
[2,8,9]
扭转它:
[9,8,2]
把它重新组合在一起:
[3,9,8,2]
祝你好运
答案 0 :(得分:1)
以下是您的要求的通用代码,复杂度为O(n) -
<E> List<E> spliceAndReverse(List<E> list, int startIndex, int endIndex){
while(startIndex < endIndex){
E e = list.get(startIndex);
list.set(startIndex, list.get(endIndex));
list.set(endIndex, e);
startIndex++;
endIndex--;
}
return list;
}
我们也可以使用子列表,这里是代码 -
static <E> List<E> spliceAndReverseUsingSubList(List<E> list, int startIndex, int endIndex){
List<E> subList = list.subList(startIndex, endIndex+1);
Collections.reverse(subList);
List<E> resultList = new ArrayList<>(list.subList(0, startIndex));
resultList.addAll(subList);
if(list.size() != endIndex+1){
resultList.addAll(list.subList(endIndex+1, list.size()));
}
return resultList;
}
见这里的例子 -
http://blog.deepaktripathi.in/uncategorized/reverse-arraylist-between-2-given-indexes/
注意 - 在平台上提问之前,请确保您已经尝试过。