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:

chatgpt

题目来自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] 能被的更多相关文章

  1. 谷歌笔试题--给定一个集合A=[0,1,3,8](该集合中的元素都是在0,9之间的数字,但未必全部包含), 指定任意一个正整数K,请用A中的元素组成一个大于K的最小正整数。

    谷歌笔试题--给定一个集合A=[0,1,3,8](该集合中的元素都是在0,9之间的数字,但未必全部包含), 指定任意一个正整数K,请用A中的元素组成一个大于K的最小正整数. Google2009华南地 ...

  2. 随机获取一个集合(List, Set)中的元素,随机获取一个Map中的key或value

    利用Java提供的Random类.从List或Set中随机取出一个元素,从Map中随机获取一个key或value. 因为Set没有提供get(int index)方法,仅仅能先获取一个随机数后.利用一 ...

  3. /编写一个函数,要求从给定的向量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:$ */ /* 编写一个 ...

  4. 洛谷 P1064 金明的预算方案【DP/01背包-方案数】

    题目背景 uim神犇拿到了uoi的ra(镭牌)后,立刻拉着基友小A到了一家--餐馆,很低端的那种. uim指着墙上的价目表(太低级了没有菜单),说:"随便点". 题目描述 不过ui ...

  5. (二)u-boot2013.01.01 for TQ210:《Makefile分析》

           当时写的时候看的是2012-10版本的,但是略对比了一遍和2013.01.01没什么改动,所以这不影响对2013.01.01版本的makefile的理解.本文比较侧重于语法句意的分析,框 ...

  6. c#---部分;把数组或者结构体存入集合里,然后再从集合中取出之后,输出;foreach既可以用到提取数组重点额数据,也可以提取集合中的数据(前提是集合中的元素是相同数据类型)

    1.输入班级人数,统计每个人的姓名,性别,年龄:集合与数组 //Console.Write("请输入班级人数:"); //int a = int.Parse(Console.Rea ...

  7. (五)u-boot2013.01.01 for TQ210:《移植前的准备及u-boot初编译》

    移植前的准备 移植前,要做的事情是搭建开发环境以及对U-boot源码的获取.首先说一下开发环境: 1.此次U-boot移植的硬件平台是天嵌的TQ210开发板: CPU:板载核心是S5PV210(Cor ...

  8. 有两个数组a,b,大小都为n,;通过交换a,b中的元素,使sum(a)-sum(b)最小。

    有两个数组a,b,大小都为n,数组元素的值任意整形数,无序: 要求:通过交换a,b中的元素,使数组a元素的和与数组b元素的和之间的差最小. 当前数组a和数组b的和之差为    A = sum(a) - ...

  9. 给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组

    题目描述: 给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组. 说明:初始化 nums1 和 nums2 的元素数量分别为 m ...

  10. K:找寻数组中第n大的数组元素的三个算法

    相关介绍:  给定一个数组,找出该数组中第n大的元素的值.其中,1<=n<=length.例如,给定一个数组A={2,3,6,5,7,9,8,1,4},当n=1时,返回9.解决该问题的算法 ...

随机推荐

  1. CentOS7.4 安装 11204 ASM GI 组件时:ohasd failed to start

    前段时间某客户要求在CENTOS7上部署Oracle 11.2.0.4 single instance && ASM存储,遇到一个比较头疼的问题,好在已经处理完了. 在图形化执行安装程 ...

  2. H5移动端字体自适应(也适用于宽高)

    原文地址: https://mp.weixin.qq.com/s/hhmav2sbAgb7w17ipVZiTw 方法一:纯css方法, 精确度高,IOS 和 安卓 字体大小同等比例1.1 以16px为 ...

  3. SSIS作业提示所请求的 OLE DB 访问接口 Microsoft.ACE.OLEDB.12.0 尚未注册

    没有跨不过的坎,也没有解决不了的问题,那些曾经没有把我们打死的困难,最终都会让我们变得更加强大 最近在使用ETL获取Excel数据时,在本地运行没有任何问题,部署到服务器后,使用作业运行时便一直提示以 ...

  4. 五分钟掌握Python中配置文件解析器configparser的使用

    ---  好的方法很多,我们先掌握一种  --- [背景] 这里描述的配置文件为自动化用例中使用到的信息,非pytest自动化框架中例如pytest.ini, conftest.py等具有特殊意义的配 ...

  5. Flask常用插件

    Flask特点: 1.小而精的代表 2.基于Werkzeug工具箱编写的轻量级web开发框架,它主要面向需求简单,项目周期短的Web小应用 3.灵活,核心思想是Flask只完成基本的功能,别的功能都是 ...

  6. 开源的 API 学习平台「GitHub 热点速览」

    前有 5 万颗星标的开源项目 HTTPie 因误操作导致 Star 清零(2022 年),上周知名开源项目 Elasticsearch 也经历了 Star 一夜清零的事件.这些事故的原因均是管理员误将 ...

  7. .NET 8.0 通用管理平台,支持模块化、WinForms 和 WPF

    前言 领导要求做一个小项目,要求独立运行,用以最少的依赖,此时不想集成到主项目中,但是又想用HzyAdmin中如此好用的自动注入,还有操作简单的仓储模式,话不多说,直接开干. HzyAdmin 是一个 ...

  8. 题解:CF687C The Values You Can Make

    CF687C The Values You Can Make 题解 题目翻译感觉不明不白的(至少我看了几遍没看懂),这里给个较为清晰的题面. 题目描述 给你 \(n\) 个硬币,第 \(i\) 个硬币 ...

  9. lua获取请求参数以及在nginx.conf中使用

    -- 获取请求路径 local request_uri = ngx.var.request_uri -- 从 header中取值 local token = ngx.req.get_headers() ...

  10. [不得不知道系列]Java面试你不得不知道的基础知识一

    当今世界上使用最广泛的编程语言之一是Java.Java是通用的高级编程语言.核心java是java编程技术概念的基础,该术语由sun Microsystems用来描述Java的标准版本(JSE).核心 ...