列表

详情


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

给你一个整数数组 hours,表示以 小时 为单位的时间,返回一个整数,表示满足 i < jhours[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)

 

提示:

相似题目

检查数组对是否可以被 k 整除

原站题解

去查看

上次编辑到这里,代码来自缓存 点击恢复默认模板
class Solution { public: long long countCompleteDayPairs(vector<int>& hours) { } };

rust 解法, 执行用时: 4 ms, 内存消耗: 6 MB, 提交时间: 2024-10-23 09:20:54

impl Solution {
    pub fn count_complete_day_pairs(hours: Vec<i32>) -> i64 {
        const H: usize = 24;
        let mut ans = 0i64;
        let mut cnt = vec![0; H];
        for t in hours {
            let t = t as usize % H;
            // 先查询 cnt,再更新 cnt,因为题目要求 i < j
            // 如果先更新,再查询,就把 i = j 的情况也考虑进去了
            ans += cnt[(H - t) % H] as i64;
            cnt[t] += 1;
        }
        ans
    }
}

javascript 解法, 执行用时: 23 ms, 内存消耗: 76.4 MB, 提交时间: 2024-10-23 09:20:32

/**
 * @param {number[]} hours
 * @return {number}
 */
var countCompleteDayPairs = function(hours) {
    const H = 24;
    const cnt = Array(H).fill(0);
    let ans = 0;
    for (const t of hours) {
        // 先查询 cnt,再更新 cnt,因为题目要求 i < j
        // 如果先更新,再查询,就把 i = j 的情况也考虑进去了
        ans += cnt[(H - t % H) % H];
        cnt[t % H]++;
    }
    return ans;
};

php 解法, 执行用时: 30 ms, 内存消耗: 46.1 MB, 提交时间: 2024-10-23 09:20:10

class Solution {

    /**
     * @param Integer[] $hours
     * @return Integer
     */
    function countCompleteDayPairs($hours) {
        $ans = 0;
        $cnt = array_fill(0, 24, 0);
        foreach ( $hours as $t ) {
            // 先查询 cnt,再更新 cnt,因为题目要求 i<j
            // 如果先更新,再查询,就把 i=j 的情况也考虑进去了
            $ans += $cnt[(24-$t%24)%24];
            $cnt[$t%24]++;
        }
        return $ans;
    }
}

golang 解法, 执行用时: 121 ms, 内存消耗: 19.2 MB, 提交时间: 2024-06-16 23:14:20

func countCompleteDayPairs(hours []int) (ans int64) {
	cnt := [24]int{}
	for _, t := range hours {
		// 先查询 cnt,再更新 cnt,因为题目要求 i<j
		// 如果先更新,再查询,就把 i=j 的情况也考虑进去了
		ans += int64(cnt[(24-t%24)%24])
		cnt[t%24]++
	}
	return
}

cpp 解法, 执行用时: 138 ms, 内存消耗: 134.6 MB, 提交时间: 2024-06-16 23:12:30

class Solution {
public:
    long long countCompleteDayPairs(vector<int> &hours) {
        long long ans = 0;
        int cnt[24]{};
        for (int t : hours) {
            // 先查询 cnt,再更新 cnt,因为题目要求 i<j
            // 如果先更新,再查询,就把 i=j 的情况也考虑进去了
            ans += cnt[(24 - t % 24) % 24];
            cnt[t % 24]++;
        }
        return ans;
    }
};

java 解法, 执行用时: 4 ms, 内存消耗: 95 MB, 提交时间: 2024-06-16 23:11:59

class Solution {
    public long countCompleteDayPairs(int[] hours) {
        long ans = 0;
        int[] cnt = new int[24];
        for (int t : hours) {
            // 先查询 cnt,再更新 cnt,因为题目要求 i<j
            // 如果先更新,再查询,就把 i=j 的情况也考虑进去了
            ans += cnt[(24 - t % 24) % 24];
            cnt[t % 24]++;
        }
        return ans;
    }
}

python3 解法, 执行用时: 169 ms, 内存消耗: 60.6 MB, 提交时间: 2024-06-16 23:11:37

class Solution:
    def countCompleteDayPairs(self, hours: List[int]) -> int:
        ans = 0
        cnt = [0] * 24
        for t in hours:
            # 先查询 cnt,再更新 cnt,因为题目要求 i<j
            # 如果先更新,再查询,就把 i=j 的情况也考虑进去了
            ans += cnt[(24 - t % 24) % 24]
            cnt[t % 24] += 1
        return ans

上一题