给定的问题可以简化为这样一个事实,即我们需要从给定的列表 A 中发现(a,b)这样的对(a + b) mod 60 == 0。观察 #1:对于任何整数 x,(x mod 60) 位于 o 到 59 之间。初始化一个长度为 60 的数组,默认值设置为 0,其索引i将存储列表 A 中元素的数量,这样x mod 60 = i对于属于 A 的所有 xint freq[60] = {0};for(int i = 0; i < A.size(); i++) freq[(A[i] % 60)]++;现在再次迭代数组 A,对于每个 x,我们需要60 - (x mod 60)累积频率图中索引的计数,这将对应于它可以与之形成对的元素的数量。情况 where(x mod 60) == 30将是一个棘手的问题,这将要求我们从频率计数中减去 1。int ans = 0;for(int i = 0; i < A.size(); i++) { ans += freq[60 - (A[i] % 60)]; if(A[i] % 60 == 30) ans--;}解决方案的整体复杂度为 O(n)。