Day 24:100301. 构成整天的下标对数目II

58 阅读1分钟

Leetcode 100301. 构成整天的下标对数目II

给你一个整数数组 hours,表示以 **小时 **为单位的时间,返回一个整数,表示满足 i < j 且 hours[i] + hours[j] 构成 **整天 **的下标对 i, j 的数目。

**整天 **定义为时间持续时间是 24 小时的 **整数倍 **。

例如,1 天是 24 小时,2 天是 48 小时,3 天是 72 小时,以此类推。

image.png

把所有数据对 24 取余存储到一个数组中。
对于每一个值找对应的 24 - i 的数目,进行相乘得到结果。对于 0 和 12 要特殊考虑。

完整代码

class Solution {
    public long countCompleteDayPairs(int[] hours) {
        long[] times = new long[24];
        for (int hour : hours) {
            times[hour % 24]++;
        }
        long res = 0;
        // 0 和 12
        if (times[0] > 1) {
            res += (times[0] * (times[0] -  1)) / 2;
        }
        if (times[12] > 1) {
            res += (times[12] * (times[12] -  1)) / 2;
        }
        for (int i = 1; i < 12; i++) {
            if (times[i] > 0 && times[24 - i] > 0) {
                res += times[i] * times[24 - i];
            }
        }
        return res;
    }
}