假设我们有大量的整数A。我们想回答许多查询,例如:
示例:A = {6,1,7,5,3}
遍历每个查询的元素并查找最小值的明显方法不足以提高性能。我需要以某种方式存储所需的信息,然后在固定时间内回答查询。因此,算法不应为二次方。需要比O(N * M)更好的东西。 (N:数组大小,M:查询数)
我尝试过,但找不到解决方法。它一定是关于寻找和存储一些和以某种方式使用它们的东西。有任何想法吗?感谢您的阅读。
答案 0 :(得分:3)
要考虑的两个选项:
第一个工作原理是递归计算偶数位置上所有对的最小值,然后在4的倍数位置上计算所有4的最小值,然后在8的所有倍数上计算所有8的最小值,依此类推。然后,每当要访问特定范围的最小值时,就将其分解为已有的部分并计算其中的最小值。
例如,要查找元素1..10的最小值,请使用元素1和2..3以及4..7和8..9和10的最小值。
第二个通过计算所有位置上所有对的最小值,然后计算所有位置上的所有4s,然后计算所有位置上的所有8s的最小值。当您具有特定范围时,可以将其构造为两个部分中的最小部分,然后计算这两个部分中的最小部分。
例如,要查找元素1..10的最小值,请使用元素1..8的最小值和元素3..10的最小值。
答案 1 :(得分:-1)
为每个问题提出一个“解决方案”,一个“最小”和一个“最大”
然后,当您传递到数组的下一个元素时,如果到达Index == min的问题,solution =该索引的编号。 而且,只要您没有达到最大值,就可以将解决方案与索引和实际解决方案中的数字进行比较。 (好的,我意识到我发布的消息是n * m,对不起)