LeetCode每日一题4.17

2176.统计数组中相等且可以被整除的数对

问题分析

理解问题:

给定一个整数数组 nums 和一个整数 k。

需要找到所有满足 0 <= i < j < n 且 nums[i] == nums[j] 且 (i * j) 能被 k 整除的数对 (i, j) 的数目

思路

算法思路:

遍历数组中的每一对元素 (i, j)(其中 i < j)。

检查 nums[i] 是否等于 nums[j]。

如果相等,再检查 i * j 是否能被 k 整除。

如果上述条件都满足,则计数器加一。

代码

python 复制代码
class Solution:
    def countPairs(self, nums: List[int], k: int) -> int:
        ans = 0
        for i in range(len(nums)-1):
            for j in range(i + 1, len(nums)):
                if nums[i] == nums[j] and (i * j) % k == 0:
                    ans += 1
        return ans

复杂度分析

时间复杂度:两个for循环: ( O(n^2) )。

空间复杂度:( O(1) )

学习

优化方法:枚举右维护左

如果数组长度n = 10^5 ,暴力枚举超时

问题简化:

代码:

python 复制代码
# 预处理每个数的因子
MX = 101
divisors = [[] for _ in range(MX)]
for i in range(1, MX):
    for j in range(i, MX, i):
        divisors[j].append(i)

class Solution:
    def countPairs(self, nums: list[int], k: int) -> int:
        ans = 0
        cnt = defaultdict(int)
        for j, x in enumerate(nums):  # 枚举 j,计算左边有多少个符合要求的 i
            if j and x == nums[0]:
                ans += 1  # 单独统计 i=0 的情况
            k2 = k // gcd(k, j)  # i 必须是 k2 的倍数
            ans += cnt[(x, k2)]
            for d in divisors[j]:  # j 是 d 的倍数
                cnt[(x, d)] += 1
        return ans

复杂度分析

方法学习:

作者:灵茶山艾府

链接:https://leetcode.cn/problems/count-equal-and-divisible-pairs-in-an-array/solutions/1277713/mo-ni-by-endlesscheng-wegn/

来源:力扣(LeetCode)

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

相关推荐
naruto_lnq14 小时前
分布式系统安全通信
开发语言·c++·算法
Jasmine_llq14 小时前
《P3157 [CQOI2011] 动态逆序对》
算法·cdq 分治·动态问题静态化+双向偏序统计·树状数组(高效统计元素大小关系·排序算法(预处理偏序和时间戳)·前缀和(合并单个贡献为总逆序对·动态问题静态化
爱吃rabbit的mq15 小时前
第09章:随机森林:集成学习的威力
算法·随机森林·集成学习
(❁´◡`❁)Jimmy(❁´◡`❁)15 小时前
Exgcd 学习笔记
笔记·学习·算法
YYuCChi16 小时前
代码随想录算法训练营第三十七天 | 52.携带研究材料(卡码网)、518.零钱兑换||、377.组合总和IV、57.爬楼梯(卡码网)
算法·动态规划
不能隔夜的咖喱16 小时前
牛客网刷题(2)
java·开发语言·算法
VT.馒头16 小时前
【力扣】2721. 并行执行异步函数
前端·javascript·算法·leetcode·typescript
进击的小头16 小时前
实战案例:51单片机低功耗场景下的简易滤波实现
c语言·单片机·算法·51单片机
咖丨喱18 小时前
IP校验和算法解析与实现
网络·tcp/ip·算法
罗湖老棍子18 小时前
括号配对(信息学奥赛一本通- P1572)
算法·动态规划·区间dp·字符串匹配·区间动态规划