让我们有一个队列和一个最后排队的项目。找出项目是否(不)在队列中的另一个位置的最有效方法是什么?
如果项目有帮助,可以将该项目记住到另一个变量中。
答案 0 :(得分:4)
只需保留 HashSet<T>
Dictionary<T,int>
并以这种方式记录您的项目 - 当您将队列中的项目排入队列时,您可以增加该项目的计数(或添加如果还没有出现在字典中 - 你可以在添加新项目之前使用dictionary.ContainsKey()
进行检查以查看项目是否已添加,或检索项目的计数(&gt ;在这种情况下,插入后为= 2) - 这当然要求项目的正确定义相同。
同样,当您从队列中出列项目时,您必须减少字典中项目的计数,并在计数达到零时将其删除。
这种方法为O(1)查找时间增加了额外的内存成本。
答案 1 :(得分:0)
我终于找到了!我希望它也有助于其他人。
此任务的更好收藏是LinkedList
bool findNotLast<T>(T item, LinkedList<T> list) {
return list.Count>1 && list.Find(item) != list.Last;
}