pax*_*blo 10
在O(n)时间内使用O(1)存储器使用,可以在O(n)时间内完成数据集的顺序扫描,寻找最大值.
您只需将当前最大值设置为第一个元素,然后运行所有其他元素,如果值更大,则将当前最大值设置为该值.伪代码:
max = list[first_index]
for index = first_index+1 to last_index:
if list[index] > max:
max = list[index]
Run Code Online (Sandbox Code Playgroud)
的复杂性也不会因元素的数量在列表中,这样也没关系有多少改变.
然而,运行时间将改变(因为算法是O(n)时间),并且如果找到最大快速是重要的,则存在许多可能性.这些都取决于列表更改时的工作,而不是每次您需要信息时,因此它们更适合读取比写入更频繁的列表,因此可以分摊成本.
选项1是保持列表排序,以便您可以抓住最后一个元素.这可能是矫枉过正的只是保持最大的记录.
选项2是在插入或删除列表时重新计算最大值(以及保留它的元素数).最初设置max为0,maxcount为空列表设置为0 .
对于插入:
maxcount为0(列表为空),则设置max为此值并设置maxcount为1.max,则设置max为此值并设置maxcount为1.max,则将1添加到maxcount.删除:
max,则从中减去1 maxcount.maxcount是0,重新扫描列表以获得新的max和maxcount.这样,在任何时候,你都有最大值(计数只是一个额外的"技巧"来加速算法,其中有多个元素保持最大值).我曾经在数据分析应用程序中使用过一次,结果比重新排序快得多 - 在这种情况下我必须存储最小值和最大值,但这是相同的想法.