找到最长的子阵列,其总和可被K整除

Pet*_*ter 1 arrays algorithm data-structures

找到最长的子阵列,其总和可被K整除.在O(n)中有可能吗?如果没有,它可以更好地完成n ^ 2?

IVl*_*lad 7

我们s[i] = sum of first i elements modulo K.

我们有:

s[i] = (s[i - 1] + a[i]) % K
Run Code Online (Sandbox Code Playgroud)

我们必须为每一个找到i最小的j那样s[i] == s[j].您可以通过散列s[i]值来找到它.如果K很小,你可以保留一个数组p[i] = first position for which s[k] == i.

复杂性是O(n).

  • @AmanDeepGautam - 我认为这取决于实施.`s [i] <k`,所以当它为0时它只能被`k`整除,这个值首先出现在`s`之外(`s [-1]`或`s [0]`取决于索引),这是算法将找到的内容,因此如果您在实现它时考虑到这一点,您不应该将其作为特殊情况处理. (3认同)