05 August 2008
每首歌的时间为描述,返回所有的两首歌的总时间能被60整除的pair, Two Sum with K = 60
(60 - t % 60) % 60 表达式的原因:如果HashMap已经有 30,我们需要寻找这个数字是否有余数,这可以用 60 - t%60 来实现。例如,如果数字是 210。60 - 210 % 60 返回 30。30 已经在列表中,这可以配对形成 (30,210)。
超过 % 60 (60 - t % 60) 的原因。如果 t = 60,则表达式 60 - t % 60 返回 60。对于 60,这超出了我们的剩余范围 (0,59)。为了使其在 60 和 60 的倍数的情况下处于范围内,我们正在 ufing在 (60 - t % 60) 之上额外增加 %60。这使得余数为 0。这在 60(0,59) 的余数范围内
map.put(t % 60, map.getOrDefault(t % 60, 0) + 1) 的说明; 每次访问一个新号码时,先添加然后递增。例如:如果我有 30,150,90 当我读 30 HashMap有 30, 1 … cntr(counter) 是 0 当我读到 150 时,counter increments(30,150) 映射有 30,2 … cntr(counter) 是 1The map 应该有 2,推理当我读到 90 时,这可以形成 2 对 (90,30),90,150。 这使得计数器将增加 2 ….. cntr = 1+2 == 3
1
2
3
4
5
6
7
8
9
10
11
class Solution {
public int numPairsDivisibleBy60(int[] time) {
Map<Integer, Integer> map = new HashMap<>();
int cntr = 0;
for (int t : time) {
cntr += map.getOrDefault((60 - t % 60) % 60, 0);
map.put(t % 60, map.getOrDefault(t % 60, 0) + 1);
}
return cntr;
}
}