简单题,但是自己没有想起来O(n)的时间内解决。用的是两个for循环。而O(n)的时间内,和桶排序很像。利用余数直接判断成对的对象,省去了一次遍历。
class Solution {
public int numPairsDivisibleBy60(int[] time) {
int length = time.length;
int result = 0;
int[] nums = new int[60];
for(int i = 0; i <length;i++){
nums[time[i]%60]++;
}
int i = 1; int j = 59;
while(i<30){
result += nums[i] * nums[j];
i++;
j--;
}
// 0的组合
result+= nums[0]>1? nums[0] * (nums[0]-1 )/2:0;
// 30的组合
result+= nums[30]>1? nums[30] * (nums[30]-1 )/2:0;
return result;
}
}
网友评论