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

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.xdnf.cn/news/64.html

相关文章:

  • C#日志辅助类(Log4Net)实现
  • Python学习笔记
  • jenkins凭据管理(配置github密钥)
  • ssh用户秘钥登录设置
  • ReadableStream响应主体数据处理(截图自用)
  • 第七章:7.2求方程a*x*x+b*x+c=0的根,用3个函数,分别求当:b*b-4*a*c大于0、等于0和小于0时的根并输出结果。从主函数输入a、b、c的值
  • 聊一聊接口测试是如何进行的?
  • 16位海明码解码电路设计教程
  • 压缩包网页预览(zip-html-preview)
  • java IO/NIO/AIO
  • 【音视频】MP4解封装
  • 23种设计模式-创建型模式之单例模式(Java版本)
  • CS144 Lab1实战记录:实现TCP重组器
  • Vue中v-if和v-show区别
  • Redis之全局唯一ID
  • Python解决“小D的abc字符变换”问题
  • 进程(Process)和进程管理
  • 十三种物联网/通信模块综合对比——《数据手册--物联网/通信模块》
  • HarmonyOS
  • 安全可靠+操作简捷——安科瑞预付费电表的用户体验升级
  • 代码随想录算法训练营第三十七天| 52. 携带研究材料 518.零钱兑换II 377. 组合总和 Ⅳ 70. 爬楼梯(进阶版)
  • Dell戴尔服务器 PowerEdge R750xs + window server2012r2 || 2016
  • B端网站建设,怎样平衡功能与美观,满足企业多元需求?
  • 【Kubernetes基础--Service深入理解】--查阅笔记4
  • 通过gird布局实现div的响应式分布排列
  • 【Linux】第十章 配置和保护SSH
  • Android Mainline简介
  • Doris的向量化执行如何支撑分布式架构和复杂查询
  • ShenNiusModularity项目源码学习(18:ShenNius.Admin.Mvc项目分析-3)
  • AOSP的Doze模式-DeepIdle 初识