如何让我的功能在恒定时间内运行?

时间:2013-10-15 03:36:47

标签: java performance

我刚接到我的任务,我失去了一个功能的分数,因为它不是在恒定的时间运行,它不够有效。我不得不经历预约和等待从我的教授那里得到答案的麻烦,我想知道这里是否有人可以帮助我。

我有一个函数可以从ArrayList中随机删除和返回一个项目。

public T pick() {
    int end = l.size() - 5;
    if (l.size() == 0)
        return null;
    assert(next >= 2 && next <= l.size()-1);
    T x = l.remove(next);
    next = (l.size() > 0) ? r.nextInt(l.size()) : -5;
    return x;
}

有人能指出我能做些什么来提高这段代码的效率吗?提前谢谢!

1 个答案:

答案 0 :(得分:3)

方法ArrayList.remove具有线性时间复杂度,如果next不接近结尾。 技巧是将位于 next 的元素与 last 元素交换,并删除 last 元素。< / p>

T x = l.get(next);
l.set(next, l.get(l.size() - 1));
l.remove(l.size() - 1);