Algorithm 保持容器的最大值。

Algorithm 保持容器的最大值。,algorithm,Algorithm,假设我有一个长的值数组。我知道最大值所在的索引 在每一步中,我根据特定的标准选择一个值,并根据一些规则对其进行修改(这在这里并不重要)。 每次修改后,我必须知道数组的最大值 最简单的方法是比较修改后的值N和以前的最大值O,如果N>O,则将最大值更新为N。然而,如果被修改的索引是先前存储最大值的地方,事情就会变得棘手。在这种情况下,我需要扫描数组并找出最大值是多少,即O(L),其中L是数组的长度。 我想避免这种最坏情况的复杂性 实现这一目标的最佳方式是什么?(算法或数据结构?存储“上一个”上一个最

假设我有一个长的值数组。我知道最大值所在的索引

在每一步中,我根据特定的标准选择一个值,并根据一些规则对其进行修改(这在这里并不重要)。 每次修改后,我必须知道数组的最大值

最简单的方法是比较修改后的值
N
和以前的最大值
O
,如果
N>O
,则将最大值更新为
N
。然而,如果被修改的索引是先前存储最大值的地方,事情就会变得棘手。在这种情况下,我需要扫描数组并找出最大值是多少,即
O(L)
,其中
L
是数组的长度。 我想避免这种最坏情况的复杂性


实现这一目标的最佳方式是什么?(算法或数据结构?

存储“上一个”上一个最大值(p),当N和O是相同的索引时,将N与该值进行比较。P被N替换为当前最大值,因此如果N减小到P值以下,则P应再次成为最大值。

两个词:堆排序。一个链接:两个链接:还有一个问题是要修改的索引来自何处。无法存储这些索引,因为每次修改都可能使其无效。也许您需要一个简单的排序链表。@n.m.只有插入和删除才会使索引无效。我不能确定,但这看起来不像是必需的操作(
“…选择一个值…修改它…”
)。您不处理仅删除插入的情况。@Emil-您是对的。可以修改N,使其不是“P”之后的第二高值,从而需要搜索新的“P”。。。没有想到这一点。@0x90,忽略了Emil指出的一个缺点,1)问题说明索引被修改,没有插入或删除,2)如果N被删除,其中N==0,“P”不是仍然是数组的最大值吗?(另外,在插入的情况下,N和O将不是相同的索引,并且这个问题消失了…@huene没有仔细阅读它,我在火车上,我留下了所有的评论,因为它们指向相关主题。