我有一个阵列,让我们说:
2,3,3,2,3,3,3,2
(数组由两个唯一的整数组成,重复)
给定L
和R
(表示数组中的范围)
有没有最快的方法来反转L
到R
范围内的数组元素?
目前,我在O(n)做。
对于上面的例子,如果L = 2且R = 5,则新数组将是,
2,3, 2, 3, 3
,3,3,2
答案 0 :(得分:0)
我不认为有更快的方式(由于交换操作),但您可以使用其他数据结构。
我想这里的想法是使用一种双链表,操作通过,这将通过访问
来通过列表在伪代码中如下:
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)