Java - 拼接出列表的一部分,反转它并覆盖前一部分

时间:2017-04-13 11:47:34

标签: java algorithm

我想知道如何使用Java尽可能简单地完成这项任务:

  1. 拼出ArrayList的一部分(按索引)
  2. 反转此拼接
  3. 使用拼接/反转的列表覆盖原始列表中的索引范围。
  4. 例如,我有一个包含这些数字的列表:

    [3,2,8,9]

    拼出:

    [2,8,9]

    扭转它:

    [9,8,2]

    把它重新组合在一起:

    [3,9,8,2]

    祝你好运

1 个答案:

答案 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/

注意 - 在平台上提问之前,请确保您已经尝试过。