如何找到最大连续段的长度,该长度在给定长度N的数组的范围[L R]中形成算术级数?

时间:2019-10-24 08:33:21

标签: algorithm math

考虑数组1 2 3 5 5

  1. 对于查询[L R D]=[1 5 1],输出为3
  2. 对于查询[1 1 1],输出为1

这个问题在0<Q<10^6处也有Q个查询,因此蛮力不起作用!

注意:索引从1开始

注2:D代表AP的共同差异

1 个答案:

答案 0 :(得分:0)

可以简化您的问题,以找到具有给定共同差异的最长算术级数,数组= [L, R]和size n = R - L + 1

然后您可以从Geeksforgeeks

查找解决方案
  

天真的方法:为每个元素计算它可以形成的最长AP的长度,并在其中打印最大的AP。它涉及   O(n ^ 2)时间复杂度。

     

一种有效的方法是使用哈希

     

创建一个映射,其中密钥是AP及其启动元素   value是该AP中的元素数。这个想法是更新   键“ a”(位于索引i且起始元素不是   只要索引j(> i)的元素可以   位于“ a”的AP中(作为起始元素)。然后我们打印   地图中所有值中的最大值。