@ninijiaLeetcode每日一题练习 ------ 1590. 使数组和能被 P 整除 中发帖

从Leetcode 每日一题练习继续讨论: 
1590. 使数组和能被 P 整除
1590. Make Sum Divisible by P
题解
涉及此类和整除相关的题目,取余是基本步骤,取余的目的在于找到同余,余数相同的可视为具有某种相同的性质,数论中同余就是一种等价关系。
本题中对整个数组求和并取余后,余数即为应该删掉的子数组数字和对p取余的值,设为k。如何求得所有和对p取余余数为k的子数组呢。可以利用前缀和,如果到下标i的前缀数组和对p取余为m,到下标i+n的前缀数组和对p取余为(m+k)%p,则i到i+n之间的子数组对p取余得到的就应该是k。则我们可以将已经遍历过的前缀数组数组和取余的余数作为key,该余数对应的已遍历的最后一个下标作为value保存起来。这样遍历数组,对任一下标i我们知道其前缀和余数为m,再去遍历余数对应的下标map,找到(m-k)%p这个余数对应的下标。...