是否有任何最快的方法来反转由两种类型的元素组成的数组中的元素范围?

时间:2015-10-10 20:46:03

标签: arrays algorithm optimization range reverse

我有一个阵列,让我们说:
2,3,3,2,3,3,3,2

(数组由两个唯一的整数组成,重复)

给定LR(表示数组中的范围) 有没有最快的方法来反转LR范围内的数组元素? 目前,我在O(n)做。

对于上面的例子,如果L = 2且R = 5,则新数组将是,
2,3, 2, 3, 3,3,3,2

1 个答案:

答案 0 :(得分:0)

我不认为有更快的方式(由于交换操作),但您可以使用其他数据结构。

我想这里的想法是使用一种双链表,操作通过,这将通过访问

来通过列表
  • 下一个兄弟,如果 next 不是之前的
  • 如果 next 之前

在伪代码中如下:

class Node
{
    Node before, next;
}

void goThrough(Node root, Node currentNode)
{
     //some actions here

     if( root.next != null || root.next != currentNode )
     {
         goThrough( root.next );
     }

     if( root.before != null )
     {
         goThrough( root.before );
     }
}
然后,反转范围只是在范围的开始和结束时改变下一个/前字段 - 这实际上是 O(1)