数组和子数组

时间:2017-08-16 19:05:49

标签: arrays subset division

给定一个大小为n及其元素的数组,找到最大的子序列(包含给定顺序的元素),其总和可以用给定的数字k整除。

我在O(n ^ 2)中使用强力解决了问题,但是n是150 000,我的解决方案还不够快。我想知道是否有更好的解决方案来解决这个问题。请解释一下你的答案!

1 个答案:

答案 0 :(得分:0)

最有效的方法是使用Hashing。

  1. 如果给定数组的长度为奇数,则返回false。奇怪的长度 数组不能成对分割。

  2. 遍历输入数组并计算所有余数的出现次数。       freq [arr [i]%k] ++

  3. 再次遍历输入数组。 a) Find remainder of current element. b) If remainder divides k into two halves, then there must be even occurrences of it as it forms pair with itself only. c) If remainder is 0, then then there must be even occurrences. d) Else, number of occurrences of current remainder must be equal to number of occurrences of "k - current remainder".