2025-01-01:优质数对的总数Ⅰ。用go语言,给定两个整数数组 nums1 和 nums2,分别长度为 n 和 m,以及一个正整数 k。 如果 nums1 数组中的元素 nums1[i] 能被
2025-01-01:优质数对的总数Ⅰ。用go语言,给定两个整数数组 nums1 和 nums2,分别长度为 n 和 m,以及一个正整数 k。
如果 nums1 数组中的元素 nums1[i] 能被 nums2 数组中的元素 nums2[j] 乘以 k 除尽,则称 (i, j) 为一个优质数对(其中 0 <= i <= n - 1,0 <= j <= m - 1)。
请计算并返回所有优质数对的数量。
1 <= n, m <= 50。
1 <= nums1[i], nums2[j] <= 50。
1 <= k <= 50。
输入:nums1 = [1,3,4], nums2 = [1,3,4], k = 1。
输出:5。
解释:
5个优质数对分别是 (0, 0), (1, 0), (1, 1), (2, 0), 和 (2, 2)。
答案2025-01-01:
题目来自leetcode3162。
大体步骤如下:
1.创建两个空的 map 数据结构 count 和 count2 来分别记录 nums1 和 nums2 中出现的数字及其出现次数。
2.初始化变量 max1 为 0,用于记录 nums1 中的最大值。
3.遍历 nums1 数组,对 count 中相应数字的出现次数进行统计,同时更新 max1 的值为 nums1 中的最大数字。
4.遍历 nums2 数组,对 count2 中相应数字的出现次数进行统计。
5.初始化变量 res 为 0,用于记录符合条件的优质数对数量。
6.遍历 count2 中的数字 a 及其出现次数 cnt,然后从 ak 开始到 max1,每次以 ak 增加的步长遍历 b。
7.在遍历过程中,若 count 中存在 b 这个数字,则将 count[b] 和 count2[a] 的乘积加到 res 中。
8.返回最终的 res 值作为优质数对的总数。
总的时间复杂度:
假设 nums1 的长度为 n,nums2 的长度为 m,k 的值为常数,代码中的主要循环是两个 for 循环,第一个 for 循环是遍历 count2 中的元素,第二个 for 循环是根据 k 和 a 的值计算另一个数组中的元素并检查是否存在。因此,总的时间复杂度为 O(n*m)。
总的额外空间复杂度:
在代码中使用了两个 map 数据结构 count 和 count2 用于存储数字及其出现次数,再加上少量的变量空间,因此总的额外空间复杂度为 O(n + m)。
Go完整代码如下:
package main
import (
"fmt"
)
func numberOfPairs(nums1 []int, nums2 []int, k int) int64 {
count := make(map[int]int)
count2 := make(map[int]int)
max1 := 0
for _, num := range nums1 {
count[num]++
if num > max1 {
max1 = num
}
}
for _, num := range nums2 {
count2[num]++
}
var res int64
for a, cnt := range count2 {
for b := a * k; b <= max1; b += a * k {
if _, ok := count[b]; ok {
res += int64(count[b] * cnt)
}
}
}
return res
}
func main() {
nums1 := []int{1, 3, 4}
nums2 := []int{1, 3, 4}
k := 1
result := numberOfPairs(nums1, nums2, k)
fmt.Println(result)
}

Rust完整代码如下:
use std::collections::HashMap;
fn number_of_pairs(nums1: Vec<i32>, nums2: Vec<i32>, k: i32) -> i64 {
let mut count = HashMap::new();
let mut count2 = HashMap::new();
let mut max1 = 0;
for &num in &nums1 {
*count.entry(num).or_insert(0) += 1;
if num > max1 {
max1 = num;
}
}
for &num in &nums2 {
*count2.entry(num).or_insert(0) += 1;
}
let mut res: i64 = 0;
for (&a, &cnt) in &count2 {
let mut b = a * k;
while b <= max1 {
if let Some(&count_b) = count.get(&b) {
res += count_b as i64 * cnt as i64;
}
b += a * k;
}
}
res
}
fn main() {
let nums1 = vec![1, 3, 4];
let nums2 = vec![1, 3, 4];
let k = 1;
let result = number_of_pairs(nums1, nums2, k);
println!("{}", result);
}

2025-01-01:优质数对的总数Ⅰ。用go语言,给定两个整数数组 nums1 和 nums2,分别长度为 n 和 m,以及一个正整数 k。 如果 nums1 数组中的元素 nums1[i] 能被的更多相关文章
- 谷歌笔试题--给定一个集合A=[0,1,3,8](该集合中的元素都是在0,9之间的数字,但未必全部包含), 指定任意一个正整数K,请用A中的元素组成一个大于K的最小正整数。
谷歌笔试题--给定一个集合A=[0,1,3,8](该集合中的元素都是在0,9之间的数字,但未必全部包含), 指定任意一个正整数K,请用A中的元素组成一个大于K的最小正整数. Google2009华南地 ...
- 随机获取一个集合(List, Set)中的元素,随机获取一个Map中的key或value
利用Java提供的Random类.从List或Set中随机取出一个元素,从Map中随机获取一个key或value. 因为Set没有提供get(int index)方法,仅仅能先获取一个随机数后.利用一 ...
- /编写一个函数,要求从给定的向量A中删除元素值在x到y之间的所有元素(向量要求各个元素之间不能有间断), 函数原型为int del(int A ,int n , int x , int y),其中n为输入向量的维数,返回值为删除元素后的维数
/** * @author:(LiberHome) * @date:Created in 2019/2/28 19:39 * @description: * @version:$ */ /* 编写一个 ...
- 洛谷 P1064 金明的预算方案【DP/01背包-方案数】
题目背景 uim神犇拿到了uoi的ra(镭牌)后,立刻拉着基友小A到了一家--餐馆,很低端的那种. uim指着墙上的价目表(太低级了没有菜单),说:"随便点". 题目描述 不过ui ...
- (二)u-boot2013.01.01 for TQ210:《Makefile分析》
当时写的时候看的是2012-10版本的,但是略对比了一遍和2013.01.01没什么改动,所以这不影响对2013.01.01版本的makefile的理解.本文比较侧重于语法句意的分析,框 ...
- c#---部分;把数组或者结构体存入集合里,然后再从集合中取出之后,输出;foreach既可以用到提取数组重点额数据,也可以提取集合中的数据(前提是集合中的元素是相同数据类型)
1.输入班级人数,统计每个人的姓名,性别,年龄:集合与数组 //Console.Write("请输入班级人数:"); //int a = int.Parse(Console.Rea ...
- (五)u-boot2013.01.01 for TQ210:《移植前的准备及u-boot初编译》
移植前的准备 移植前,要做的事情是搭建开发环境以及对U-boot源码的获取.首先说一下开发环境: 1.此次U-boot移植的硬件平台是天嵌的TQ210开发板: CPU:板载核心是S5PV210(Cor ...
- 有两个数组a,b,大小都为n,;通过交换a,b中的元素,使sum(a)-sum(b)最小。
有两个数组a,b,大小都为n,数组元素的值任意整形数,无序: 要求:通过交换a,b中的元素,使数组a元素的和与数组b元素的和之间的差最小. 当前数组a和数组b的和之差为 A = sum(a) - ...
- 给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组
题目描述: 给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组. 说明:初始化 nums1 和 nums2 的元素数量分别为 m ...
- K:找寻数组中第n大的数组元素的三个算法
相关介绍: 给定一个数组,找出该数组中第n大的元素的值.其中,1<=n<=length.例如,给定一个数组A={2,3,6,5,7,9,8,1,4},当n=1时,返回9.解决该问题的算法 ...
随机推荐
- 【小记】Docker容器间SSH公钥自动交换实现免密登录的一次尝试
咋想到这茬了 最近开始忙毕设的事儿了,想部署个伪分布式的Spark + Hadoop集群来进行测试.思来考去,最终咱把目光放在了Docker上. 盘了两天,发现这玩意意外的有趣,镜像构建好后开箱即用, ...
- NCNN 模型推理详解及实战
一,依赖库知识速学 aarch64 OpenMP AVX512 submodule apt upgrade 二,硬件基础知识速学 2.1,内存 2.2,CPU 三,ncnn 推理模型 3.1,shuf ...
- 「模拟赛」多校 A 层联训 16
比赛链接 A.四舍五入 虽然让找 \(i\),但枚举 \(i\) 很没前途啊,所以考虑找到所有 \(j\) 的个数 发现对于一组合法的 \(i.j\) 需要满足 \(i\in [kj,\ kj+0.5 ...
- Maven的顶级功能——依赖管理
依赖管理 依赖管理解决的问题 我们学完一个语言的语法之后,我们应该都能知道函数的引用或者类的创建等了.为了方便管理,我们就会把一些特定的功能实现写在一个代码文件中,我们只需要使用的时候导入就行了,这样 ...
- jquery datatable 全选,反选 参考文档
1 版本号 DataTables 1.10.12 2 API文档地址 http://datatables.club/reference/option/ 官方option http://datatabl ...
- 使用 JuiceFS 快照功能实现数据库发布与端到端测试
今天的博客来自 JuiceFS 云服务用户 Jerry,他们通过使用 JuiceFS snapshot 功能,创新性地实现了数据的版本控制.Jerry,是一家位于北美的科技公司,利用人工智能和机器学习 ...
- StarRocks 物化视图刷新流程及原理
前段时间给 StarRocks 的物化视图新增了一个特性,那也是我第一次接触 StarRocks,因为完全不熟悉这个数据库,所以很多东西都是从头开始了解概念. 为了能顺利的新增这个特性(具体内容可以见 ...
- javaScript 的面向对象程序
理解对象 属性类型 数据属性(数据属性包含一个数据值的位置,这个位置可以读取和写入值,数据属性有4描述) [Configurable]:表示能否通过 delete 删除属性从而重新定义属性,能否修改属 ...
- JS 预编译代码实例分析
了解 JavaScript 引擎在执行代码过程中所做的一些行为是非常必要的,这有助于我们在遇到莫名其妙的调用时,能够大致定位问题所在.在我学习了预编译的相关知识,并基于该文章,引用其中的一段代码,结合 ...
- Python 潮流周刊#80:Django 项目性能调优(摘要)
本周刊由 Python猫 出品,精心筛选国内外的 250+ 信息源,为你挑选最值得分享的文章.教程.开源项目.软件工具.播客和视频.热门话题等内容.愿景:帮助所有读者精进 Python 技术,并增长职 ...