@
helloworld000 leetcode 这么靠前的题。
不过你想复杂了。首先我不需要排序,其次我的接口可以这么写 T add(E elment); boolean remove(E element, T token);类似 js 的 setTimeout 和 clearTimeout 函数。还有个隐藏条件是一个 elenment 只会 add 一次,容器只会被遍历一次。
最快的方法是使用一个 Array 和一个 Stack,Array 在没有元素被删除的时候正常增加,有元素被删除的时候把被删除元素下标保存到 Stack 里面,如果 Stack 不为空,则增加时优先使用 Stack 里的下标。不过在使用时要考虑的比这个多,要不要实现 Collection 接口,token 保存在哪,遍历时要不要快速失败,如果要改成并发容器需要多大工作量。最关键的是不做基准测试很难知道到底那个实现快,比如你猜同样是 O(1),用链表快还是散列表快。
跑题了,我觉得刷算法题性价比的原因是要花很大精力去写很脏的代码,去实现不灵活的接口,当然学到的经验很宝贵,但是在写代码时只是最基本的素质,而在面试时,手写的代码面试官也不会看,说出原理就行了。