看不太懂,先留着
可除数和对 | HackerRank — Divisible Sum Pairs | HackerRank
给定一个整数数组和一个正整数k ,求(i,j) 对中i<j和ar[i] +ar[j] 能被k整除的个数。
1 | function divisibleSumPairs(n: number, k: number, ar: number[]): number { |
-
count: 用于记录满足条件的数对的数量,初始值设为0。 -
remainderCount: 用于存储余数的出现次数。长度为k的数组,初始时所有值为0。其目的在于记录每个余数(0 到 k-1)的出现次数,方便后续查找。 -
const remainder = ar[i] % k;计算当前元素ar[i]对k的余数,这样可以确定这个数在模k的情况下的分类。 -
const neededRemainder = (k - remainder) % k; -
通过上面的公式,我们可以确定要与当前数
ar[i]配对的另一个数的余数:如果
remainder是0,neededRemainder也是0,这意味着另一个数也应该是0(即ar[j]的余数为0)。如果
remainder是1且k是5,则neededRemainder是4,这意味着要找的另一个数的余数应该是4,以使得它们的和(即1 + 4)能够被5整除。 -
更新
count:count += remainderCount[neededRemainder]:这一步的作用是,如果当前数的余数为remainder,我们通过查找remainderCount数组来获取之前有多少个数的余数是neededRemainder。这些数可以和当前数成对,从而构成符合条件的和。
-
更新
remainderCount:remainderCount[remainder]++:这行代码是将当前数的余数remainder的计数加1,因为我们在处理完当前数后,希望将它也加入到余数的计数中,供后续的元素使用。