In a list of songs, the i-th song has a duration of time[i] seconds.
Return the number of pairs of songs for which their total duration in seconds is divisible by 60. Formally, we want the number of indices i < j with (time[i] + time[j]) % 60 == 0.
我开始想了最简单的,两个for循环,挨个遍历,但是超时了。。。
看了Discuss中的答案,使用一个数组(c[0] 表示余数为0的个数 ,c[1] 表示余数为1的个数。。。)
for (int t : time) {
res += c[(60 - t % 60) % 60]; // 与t相加等于60的数量,就看此时c[(60 - t % 60) % 60]的值
//例:余数为1的,就看c[59]的值,余数为2的,就看c[58]的值...
c[t % 60] += 1;
}
后来还有一种做法,用到了HashMap,key存放余数i(0<= i <= 59),值存放 t%60=i 的个数,基本思想和上个解法是一样的,而且效率还没有数组的高!
自己还真的差很远呢,加油!坚持住!