如何查明“队列”是否包含其他位置的最后一个项目

本文关键字:位置 其他 最后一个 项目 包含 是否 何查明 队列 | 更新日期: 2023-09-27 18:24:40

让我们有一个队列和一个最后入队的项目。找出项目是否(不)在队列中的另一个位置的最有效方法是什么?

如果有帮助,可以将该项记忆到另一个变量中。

如何查明“队列”是否包含其他位置的最后一个项目

只需保留一个HashSet<T>Dictionary<T,int>并以这种方式对您的项目进行计数-当您将项目排入队列时,您会增加该项目的计数(或者如果还不存在,则将其添加到字典中)-您可以在添加新项目之前使用dictionary.ContainsKey()进行检查,以查看该项目是否已经添加,或者检索项的计数(在这种情况下,插入后>=2)-这当然需要正确定义项的相等性。

同样,当您将一个项目从队列中出列时,您必须减少字典中某个项目的计数,并在计数达到零时将其删除。

这种方法用额外的内存成本换取O(1)查找时间。

我终于找到了!我希望它也能帮助其他人。

此任务的更好集合是LinkedList

bool findNotLast<T>(T item, LinkedList<T> list) {
    return list.Count>1 && list.Find(item) != list.Last;
}