使用二叉树查找数组中的最大间隔

时间:2013-05-20 10:28:44

标签: c++ data-structures binary-tree

我正在研究二叉树!我在这个家庭作业中遇到了问题。 我必须使用二叉树来解决这个问题 这是问题所在: 您将获得一个整数列表。然后,您需要回答表单中的一些问题:“A索引和索引B之间列表内容元素的最大值是多少?”。 例如:

INPUT :
10
2 4 3 5 7 19 3 8 6 7
4
1 5
3 6
8 10
3 9
OUTPUT:
7
19
8
19

时间限制和记忆(语言:C + +)

时间:1GHz机器上0.5秒。 内存:16000 KB

约束

1< = N< = 100000,其中N是列表中元素的数量。

1< = A,B< = N,其中A,B是范围的极限。

1< = I< = 10 000,其中I是间隔数。

请不要给我解决方案只是一个提示! 非常感谢!

3 个答案:

答案 0 :(得分:2)

正如在评论中已经讨论的那样,为简单起见,您可以向数组添加条目以使其大小为2的幂,因此二叉树对于所有叶子具有相同的深度。您添加到此列表中的元素并不重要,因为您不会在实际算法中使用这些计算值。

在二叉树中,您必须以自下而上的方式计算最大值。然后,这些值告诉您这些节点所代表的整个范围的最大值;这是树的主要思想。

剩下的就是将查询拆分为这样的树节点,因此它们使用比间隔大小更少的节点来表示原始间隔。找出树节点所代表的区间的“模式”。然后找出一种方法将输入间隔分成尽可能少的节点。也许从简单的解决方案开始:只是在离开节点中分割输入,即单个元素。然后弄清楚如何使用树中的内部节点从区间“组合”多个元素。找到一个算法,通过 not 使用树为你做这个(因为这需要元素数量的线性时间,但树的整个想法是使它成为对数)。

答案 1 :(得分:0)

编写一些以0的间隔工作的代码。这将非常简单。

然后写一些大小为1的间隔。它仍然很简单。

然后写一些大小为2的间隔。可能需要进行比较。它仍然很简单。

然后写一些大小为3的区间。可能需要选择要比较的大小为2的区间。这不太难。

完成此操作后,应该很容易使其适用于任何间隔大小。

答案 2 :(得分:0)

数组将是此问题的最佳数据结构。

但是考虑到你需要使用二叉树,我会在二进制文件中存储(索引,值) 树和索引上的关键。