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)。