给你一个整数数组 hours,表示以 小时 为单位的时间,返回一个整数,表示满足 i < j 且 hours[i] + hours[j] 构成 整天 的下标对 i, j 的数目。
整天 定义为时间持续时间是 24 小时的 整数倍 。
例如,1 天是 24 小时,2 天是 48 小时,3 天是 72 小时,以此类推。
示例 1:
输入: hours = [12,12,30,24,24]
输出: 2
解释:
构成整天的下标对分别是
(0, 1)和(3, 4)。
示例 2:
输入: hours = [72,48,24,3]
输出: 3
解释:
构成整天的下标对分别是
(0, 1)、(0, 2)和(1, 2)。
提示:
1 <= hours.length <= 5 * 10^51 <= hours[i] <= 10^9
我的解答:
class Solution {
    public long countCompleteDayPairs(int[] hours) {
        // 这里必须使用long类型数组
        // 因为某些值的数量远大于int类型最大值,导致数值溢出(半天想不明白自己错在哪,看了题解才幡然醒悟T_T)
        long[] hour = new long[24];
        long res = 0;
        for(int h : hours){
            // 通过求余的方式将值的范围约束在0-23以内
            hour[h % 24]++;
        }
        // 单独计算0跟12的组合,比较特殊
        res += ( hour[0]  * ( hour[0]  - 1 )) / 2; 
        res += ( hour[12] * ( hour[12] - 1 )) / 2; 
        for(int i = 1; i < 12; i++){
            res += hour[i] * hour[24-i];
        }
        return res;
    }
} 
 



















