当前位置: 首页 > news >正文

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 整除。
如果上述条件都满足,则计数器加一。

代码

class Solution:def countPairs(self, nums: List[int], k: int) -> int:ans = 0for 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 += 1return ans

复杂度分析

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

学习

优化方法:枚举右维护左
如果数组长度n = 10^5 ,暴力枚举超时
问题简化:
在这里插入图片描述

代码:

# 预处理每个数的因子
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 = 0cnt = defaultdict(int)for j, x in enumerate(nums):  # 枚举 j,计算左边有多少个符合要求的 iif 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)] += 1return ans

复杂度分析

在这里插入图片描述

方法学习:

作者:灵茶山艾府
链接:https://leetcode.cn/problems/count-equal-and-divisible-pairs-in-an-array/solutions/1277713/mo-ni-by-endlesscheng-wegn/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

http://www.dtcms.com/a/137819.html

相关文章:

  • 数据江湖:Node.js 与 SQLite3 的轻量之道
  • 昆仑万维开源 32B 推理模型 Skywork-OR1:超越 DeepSeek-R1
  • 测试用例的生命周期:从诞生到退役的全过程管理
  • 华为OD机试真题——统计匹配的二元组个数(2025A卷:100分)Java/python/JavaScript/C++/C语言/GO六种最佳实现
  • 华为OD机试真题——最小的调整次数/特异性双端队列(2025A卷:100分)Java/python/JavaScript/C++/C语言/GO六种最佳实现
  • java抽象类
  • GIS开发笔记(4)结合osg及osgEarth实现地图选点功能
  • Java并发-AQS框架原理解析与实现类详解
  • 有关压缩算法的学习
  • Web Components 开发与集成
  • 【AI插件开发】Notepad++ AI插件开发实践:支持多平台多模型
  • MySQL Binlog 数据恢复总结
  • 不同Linux 发行版的软件包结构差异对比
  • centos7停服yum更新kernel失败解决办法
  • windows server C# IIS部署
  • 双指针算法(一)
  • c++11 绑定器bind
  • open webui 介绍 是一个可扩展、功能丰富且用户友好的本地部署 AI 平台,支持完全离线运行。
  • Python程序结构深度解析:顺序结构与对象布尔值的底层逻辑与应用
  • 【Docker项目实战】使用Docker部署Gitblit服务器
  • Linux基于Centos7部署FTP服务器
  • chili3d调试笔记2+添加web ui按钮
  • 基于MLKit的Android人脸识别应用开发实践
  • 【C++算法】62.字符串_最长回文子串
  • pool层种类
  • 日语学习-日语知识点小记-构建基础-JLPT-N4阶段(4):できます 完成了等 しか。。。ない 只有
  • Day(21)--网络编程
  • 深度学习基础:从入门到理解核心概念
  • Day09【基于jieba分词和RNN实现的简单中文分词】
  • AI大模型从0到1记录学习 数据结构和算法 day19