看不太懂,先留着
可除数和对 | 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
,因为我们在处理完当前数后,希望将它也加入到余数的计数中,供后续的元素使用。