Leetcode3164. 优质数对的总数 II

Every day a Leetcode

题目来源:3164. 优质数对的总数 II

解法1:统计因子

遍历 nums1,统计所有元素的因子个数,记录到哈希表 cnt 中。

遍历 nums2,那么有 cnt[nums2[i]*k] 个数可以被 nums2[i]*k 整除,加入答案。

代码:

/*
 * @lc app=leetcode.cn id=3164 lang=cpp
 *
 * [3164] 优质数对的总数 II
 */

// @lc code=start
class Solution
{
public:
    long long numberOfPairs(vector<int> &nums1, vector<int> &nums2, int k)
    {
        unordered_map<int, int> cnt; // 统计因子的出现次数
        for (int &x : nums1)
            for (int i = 1; i * i <= x; i++)
                if (x % i == 0)
                {
                    cnt[i]++;
                    if (i * i < x)
                        cnt[x / i]++;
                }

        long long ans = 0LL;
        for (int &x : nums2)
            if (cnt.contains(x * k))
                ans += cnt[x * k];
        return ans;
    }
};
// @lc code=end

结果:

在这里插入图片描述

复杂度分析:

时间复杂度:O(n*sqrt(U)+m),其中 n 是 nums1 的长度,m 是 nums2 的长度,U=max⁡(nums1)。

空间复杂度:O(U),其中 U=max⁡(nums1)。

解法2:枚举倍数

统计 nums1[i] / k 和 nums2[i] 的出现次数,分别保存到哈希表 cnt1 和 cnt2 中。

设 cnt1 中的最大 key 为 u。枚举 cnt2 中的元素 i,然后枚举 i 的倍数 i、2i、3i…,直到 u,累加这些数在 cnt1 中的 value,乘上 cnt2[i],加入答案。

代码:

// 枚举倍数

class Solution
{
public:
    long long numberOfPairs(vector<int> &nums1, vector<int> &nums2, int k)
    {
        unordered_map<int, int> cnt1; // 统计 nums1[i] / k 的出现次数
        for (int &x : nums1)
            if (x % k == 0)
                cnt1[x / k]++;
        if (cnt1.empty())
            return 0LL;
        unordered_map<int, int> cnt2; // 统计nums2[i] 的出现次数
        for (int &x : nums2)
            cnt2[x]++;

        long long ans = 0LL;
        int u = ranges::max_element(cnt1)->first;

        for (auto &[i, c] : cnt2)
        {
            int s = 0;
            for (int j = i; j <= u; j += i)
                if (cnt1.contains(j))
                    s += cnt1[j];
            ans += (long long)s * c;
        }
        return ans;
    }
};

结果:

在这里插入图片描述

复杂度分析:

时间复杂度:O(n+m+(U/k)logm),其中 n 是 nums1 的长度,m 是 nums2 的长度,U=max⁡(nums1)。

空间复杂度:O(n+m),其中 n 是 nums1 的长度,m 是 nums2 的长度。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/679951.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

容器化部署Pig微服务快速开发框架

系统说明 基于 Spring Cloud 、Spring Boot、 OAuth2 的 RBAC 企业快速开发平台&#xff0c; 同时支持微服务架构和单体架构 提供对 Spring Authorization Server 生产级实践&#xff0c;支持多种安全授权模式 提供对常见容器化方案支持 Kubernetes、Rancher2 、Kubesphere、E…

南昌代理记账公司的收费标准及咨询服务

随着现代商业的快速发展&#xff0c;对于财务管理的需求也在不断增加&#xff0c;作为一家专业的会计代理公司&#xff0c;我们的目标是为各类企业提供全面、高效的财务管理服务&#xff0c;任何服务都应以公平合理的价格为基础&#xff0c;我们一直坚持这一原则。 关于常州代…

NDIS网络接口

在windows发行版本中&#xff0c;真的存在一个 ndis.sys 的驱动文件&#xff0c;和我们认知的不太一样&#xff0c;它真的是一个DLL&#xff0c;NDIS 库打包在 Ndis.sys&#xff08;一个内核模式导出库&#xff09;中&#xff0c;作为一组函数&#xff0c;强调宏以获得最佳性能…

0基础学习区块链技术——链之间数据同步样例

我们可以在https://blockchaindemo.io/体验这个过程。 创建区块 默认第一个链叫Satoshi(中本聪)。链上第一个区块叫“创世区块”——Genesis Block。后面我们会看到创建的第二条链第一个区块也是如此。 新增链 新创建的链叫Debby。默认上面有一个创世区块。 然后我们让这…

可视化数据科学平台在信贷领域应用系列一:数据探索

引言 信贷风险数据建模是金融机构在数据量日益庞杂的时代进行信贷业务风控的关键技术。它能够帮助机构更好地控制风险、减少违约损失&#xff0c;并提高业务效率。通过不断优化建模方法和利用建模工具&#xff0c;金融机构的风险控制能力得到了显著提升。 在本文中&#xff0c;…

python数据分析——逻辑回归

参考资料&#xff1a;活用pandas库 逻辑回归 当响应变量为二值响应变量时&#xff0c;经常使用逻辑回归对数据建模。 # 导入pandas库 import pandas as pd # 导入数据集 acspd.read_csv(r"...\data\acs_ny.csv") # 展示数据列 print(acs.columns) # 展示数据集 pri…

MongoDB CRUD操作:可重试写入

MongoDB CRUD操作&#xff1a;可重试写入 文章目录 MongoDB CRUD操作&#xff1a;可重试写入使用的先决条件部署的限制支持的存储引擎3.6 MongoDB 驱动程序MongoDB 版本写确认 可重试写入和多文档事务启用可重试写入MongoDB驱动mongosh 可重试的写操作行为持续的网络错误故障切…

Python版《消消乐》,附源码

曾经风靡一时的消消乐&#xff0c;至今坐在地铁上都可以看到很多人依然在玩&#xff0c;想当年我也是大军中的一员&#xff0c;那家伙&#xff0c;吃饭都在玩&#xff0c;进入到高级的那种胜利感还是很爽的&#xff0c;连续消&#xff0c;无限消&#xff0c;哈哈&#xff0c;现…

开源数据库同步工具DBSyncer-数据库的连接

开源数据库同步工具DBSyncer使用的是什么数据库呢&#xff1f; 查看连接信息&#xff0c;如下&#xff1a; 如上图可知&#xff0c;DBSyncer支持两种方式的数据库连接方式&#xff0c; #storage #数据存储类型:disk(默认)/mysql(推荐生产环境使用) #disk-磁盘:/data/config(驱…

基于Java的敬老院管理系统设计和实现(论文 + 源码)

【免费】基于Java的敬老院管理系统设计和实现.zip资源-CSDN文库https://download.csdn.net/download/JW_559/89399326 基于Java的敬老院管理系统设计和实现 摘 要 新世纪以来,互联网与计算机技术的快速发展,我国也迈进网络化、集成化的信息大数据时代。对于大众而言,单机应用早…

Git版本控制:核心概念、操作与实践

Git是一种分布式版本控制系统&#xff0c;被广泛应用于软件开发过程中。本文将介绍Git的核心概念、常用操作以及最佳实践&#xff0c;帮助读者掌握Git的基本技巧&#xff0c;提高团队协作效率。 一、引言 在软件开发过程中&#xff0c;版本控制是至关重要的。它能帮助我们跟踪…

推导Hessian of XPBD

记 M后面新增的部分为H H − ∂ 2 C ∂ x 2 λ H - \frac{\partial^2 C}{\partial x^2} \lambda H−∂x2∂2C​λ 那么如何求C的二阶导数呢 使用 https://www.matrixcalculus.org/

java自学阶段二:JavaWeb开发--day80(项目实战2之苍穹外卖)

《项目案例—黑马苍穹外卖》 目录&#xff1a; 学习目标项目介绍前端环境搭建(前期直接导入老师的项目&#xff0c;后期自己敲&#xff09;后端环境搭建&#xff08;导入初始项目&#xff0c;新建仓库使用git管理项目&#xff0c;新建数据库&#xff0c;修改登录功能&#xff…

如何以定投策略投资场外个股期权?

场外个股期权为投资者提供了一种灵活且富有潜力的投资工具。与传统的投资方式不同&#xff0c;场外个股期权以其低门槛、高灵活性和潜在的较高回报吸引了众多投资者。对于希望长期稳健增值的投资者来说&#xff0c;利用定投策略来投资场外个股期权是一个值得考虑的选项。 文章…

mathematica中三维画图中标记函数的最大值点

示例代码&#xff1a; Clear["*"]; f[x_, y_] : -(x - 1)^2 - (y 1)^2;(*找到最大值点*) maxPoint Maximize[{f[x, y], -10 < x < 10 && -10 < y < 10 && x^2 y^2 < 10}, {x, y}](*绘制3D图形并标记最大值点*) Y1 Plot3D[f[x, y…

gravis,一个无敌的 Python 库!

更多Python学习内容&#xff1a;ipengtao.com 大家好&#xff0c;今天为大家分享一个无敌的 Python 库 - gravis。 Github地址&#xff1a;https://github.com/robert-haas/gravis 在数据科学和机器学习领域&#xff0c;数据的可视化是一个非常重要的环节。通过可视化&#xff…

每日一题33:数据统计之广告效果

一、每日一题 返回结果示例如下&#xff1a; 示例 1&#xff1a; 输入&#xff1a; Ads 表: ------------------------- | ad_id | user_id | action | ------------------------- | 1 | 1 | Clicked | | 2 | 2 | Clicked | | 3 | 3 | Viewed…

AI智能体|一分钟教你学会使用扣子Coze工作流

大家好&#xff0c;我是无界生长&#xff0c;国内最大AI付费社群“AI破局俱乐部”初创合伙人。这是我的第 38 篇原创文章——《AI智能体&#xff5c;一分钟教你学会使用扣子Coze工作流》 AI智能体&#xff5c;一分钟教你学会使用扣子Coze工作流本文详细解释了Coze工作流的基本…

C语言 | Leetcode C语言题解之第132题分割回文串II

题目&#xff1a; 题解&#xff1a; int minCut(char* s) {int n strlen(s);bool g[n][n];memset(g, 1, sizeof(g));for (int i n - 1; i > 0; --i) {for (int j i 1; j < n; j) {g[i][j] (s[i] s[j]) && g[i 1][j - 1];}}int f[n];for (int i 0; i <…

实习面试题(答案自敲)、

1、为什么要重写equals方法&#xff0c;为什么重写了equals方法后&#xff0c;就必须重写hashcode方法&#xff0c;为什么要有hashcode方法&#xff0c;你能介绍一下hashcode方法吗&#xff1f; equals方法默认是比较内存地址&#xff1b;为了实现内容比较&#xff0c;我们需要…