Every day a Leetcode
题目来源:3185. 构成整天的下标对数目 II
解法1:哈希
本质思路类同经典的“两数之和”。枚举右,用哈希表维护左。
枚举 j,并维护 cnt[x] 表示所有满足 i < j 的下标 i 中,有几个 hours[i] 模 24 等于 x。设 y = nums[j] % 24,那么答案就是 sum(cnt[(24 - y) % 24])。
注意取余的存在,余 0 的情况要特殊处理。
代码:
/*
* @lc app=leetcode.cn id=3185 lang=cpp
*
* [3185] 构成整天的下标对数目 II
*/
// @lc code=start
class Solution
{
public:
long long countCompleteDayPairs(vector<int> &hours)
{
vector<int> cnt(24, 0);
long long ans = 0LL;
for (int &hour : hours)
{
hour %= 24;
ans += cnt[(24 - hour) % 24];
cnt[hour]++;
}
return ans;
}
};
// @lc code=end
结果:
复杂度分析:
时间复杂度:O(n+M),其中 n 为数组 hours 的长度,M=24。
空间复杂度:O(M)。