2016-05-27 193 views
-2

我有一个包含许多项目的集合。这些项目有一些属性,但让我们假设其中2个在这种情况下是重要的; 可用优先。可用是一个简单的布尔属性,而优先级可以是1到100之间的任何数字。我需要实现的是找到n个顺序的项目,其中所有项目都是可用的(== true)并且具有相同的优先级。 我并不仅限于使用集合,这意味着我可以创建额外的数据结构来加速查找过程(如显示项目状态的字节数组,例如:101010001)。在集合中查找具有相同属性的项目

如果非要形象化有点:

1 [99],0 [80],1 [60],1 [60],0 [60]

1和0示出了可用性和括号中的数字显示优先级。我需要找到第三和第四项。

实现这种算法的最快方法是什么?

注意:这当然不是一个家庭作业问题。

编辑:我无法更改项目的顺序,既不从集合中删除某些项目。

+0

将所有可用任务存储在单独的集合中并根据优先级进行排序? –

+0

HashMap具有loopkup O(1)。不能说你可以比这更好。 – FallAndLearn

+0

'这是顺序的 - 所以你不应该改变顺序? – MBo

回答

0

只需使用HashMap即可将有效元素存储为true。 HashMap的键将成为优先级,值将成为它的出现次数。

最后打印出其中的那些关键字value > 1

因此,您可以在O(n)时间复杂度下完成此操作,其中n是元素的总数。

相关问题