关于c ++中特定数据结构的想法

时间:2010-02-12 16:48:35

标签: c++ data-structures

我需要做一些任务。 有两行数字,它们就像整数对(a,b)。我必须找到a行的最多5个数字,然后选择那5个的最大值,但这次是从b行开始。例如:

1 4
5 2
3 3
7 5
6 6
2 9
3 1

在这个例子中,我需要的是(6,6),因为6(a)在a [i]数字的前5位,而6(b)是这5对中b部分的最大值。 我想用矢量和我自己定义的结构来做这个,也使用一些临时数组,但我不知道这是否正确的事情可能有更简单的方法来做到这一点。

有什么想法吗?

编辑:我还需要该对的索引号(在5的情况下,它是第五对,即。)

2 个答案:

答案 0 :(得分:2)

优先级队列保持对基于该对的第一个元素进行其顺序评估是合适的。您可以插入所有对,然后提取前5个。然后只需迭代该对列表,查找每对中第二个元素的最大值。

修改

我应该说只有你能接受O(n * lg n)

的运行时才能得到合适的解决方案。

答案 1 :(得分:0)

替代方法:

将三元组(第一个,第二个,索引)推入向量,然后使用第一个元素上的降序函数将std :: partial_sort前5个项目推送。然后使用std :: max_element和第二个仿函数来查找第二个元素的最大值,并获取其索引。如果我正确地读取partial_sort的复杂性,这应该在线性时间(O(n))中运行,因为我们总是排序最多5个元素而不是O(n * log n)。

类似地,让向量只包含对,并将包含索引的第二个向量排序到第一个。