【2025刷题笔记】- 二元组个数

刷题笔记合集🔗

二元组个数

问题描述

小柯有两个数组 ,若 则称 为一个二元组,求在给定的两个数组中,二元组的个数。

输入格式

第一行输入 。 第二行输入 个数,表示第一个数组。

第三行输入 。 第四行输入 个数,表示第二个数组。

输出格式

二元组个数。

样例输入

4
1 2 3 4
1
1
6
1 1 2 2 4 5
3
2 2 4

样例输出

1
5

数据范围

  • 数组长度不超过
  • 数组元素为整数
样例 解释说明
样例1 二元组个数为1个。, ,组成一个二元组
样例2 二元组个数为5个。 中有两个1, 中有零个1; 中有两个2, 中有两个2; 中有一个4, 中有一个4; 中有一个5, 中有零个5。所以二元组个数为 个。

题解

这道题目要求计算两个数组中能形成的二元组个数,其中二元组定义为数组 和数组 中相同值的元素对

思路分析

最直接的解法是使用双重循环,遍历数组 和数组 的每一个元素,统计满足 的对数。

但是当数据规模较大时,双重循环的时间复杂度为 ,可能导致超时。因此,我们可以采用更高效的哈希表方法。

优化的方法是:

  1. 统计两个数组中共同存在的元素
  2. 分别计算这些元素在两个数组中的出现次数
  3. 对于每个共同元素,其形成的二元组数量为该元素在数组 中的出现次数乘以在数组 中的出现次数

具体步骤

  1. 将数组 和数组 的元素分别放入集合 中,用于快速查找共同元素
  2. 遍历数组 ,统计每个在 中出现的元素的次数到
  3. 遍历数组 ,统计每个在 中出现的元素的次数到
  4. 遍历 中的每个元素,将其出现次数与 中对应元素的出现次数相乘,累加得到最终结果

时间复杂度分析

  • 构建集合和统计元素频次的时间复杂度为
  • 最终计算二元组个数的时间复杂度为 ,其中 是共同元素的个数,一般远小于

这种方法的总时间复杂度为 ,相比于双重循环的 ,大大提高了效率,适合处理题目给出的数据规模。

参考代码

  • Python
import sys
input = lambda:sys.stdin.readline().strip()

# 读取输入
m = int(input())
a_arr = list(map(int, input().split()))

n = int(input())
b_arr = list(map(int, input().split()))

def count_pairs():
    """计算二元组个数"""
    # 创建两个数组的元素集合
    a_set = set(a_arr)
    b_set = set(b_arr)
    
    # 统计a数组中元素出现次数
    a_count = {}
    for val in a_arr:
        # 只统计b_set中存在的元素
        if val in b_set:
            a_count[val] = a_count.get(val, 0) + 1
    
    # 统计b数组中元素出现次数
    b_count = {}
    for val in b_arr:
        # 只统计a_set中存在的元素
        if val in a_set:
            b_count[val] = b_count.get(val, 0) + 1
    
    # 计算二元组总数
    total = 0
    for val in a_count:
        # 每个共同值的二元组数量 = a中出现次数 × b中出现次数
        total += a_count[val] * b_count[val]
    
    return total

# 输出结果
print(count_pairs())
  • Cpp
#include <bits/stdc++.h>
using namespace std;

int main() {
    // 读取输入
    int m;
    cin >> m;
    vector<int> a(m);
    for (int i = 0; i < m; i+

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

算法刷题笔记 文章被收录于专栏

本专栏收集并整理了一些刷题笔记

全部评论

相关推荐

京东面经(总共30分钟,项目15分钟,八股15分钟)1.1-2分钟自我介绍项目一(rag)1)请你讲一下文档解析与向量检索的部分2)文档解析这一块,不能解析扫描件的pdf文档类型,你后续有什么方法去解决吗(我答的利用MCP去调用WPS的文档解析服务,面试官补充说可以利用OCR工具去实现3)ES向量检索召回率很低怎么办,(答了利用faiss去优化向量检索4)用的什么向量模型,维度是多少,有去横向对比过吗5)用到了什么大模型,这个大模型的优缺点是什么,横向对比过吗6)平时会去用ai辅助编程吗7)redis在项目中主要的用途有哪些8)在利用security+jwt这样的鉴权方法,有什么更好的方法去优化吗(面试官补充了SSO,OAuth,可以实现第三方登录,单点登录)9)讲一下你实现的security+jwt这样的过滤器流程,怎么进行权限控制的10)为什么要用websocket去进行交互,优缺点在哪,相比于http的区别11)谈一下你对ai的看法,了解哪些ai的技术栈,框架,未来的发展方向有想法吗12)有什么想特别学习的技术吗项目二1)讲一下利用Redis缓存+定时异步将热点数据的并发点赞、评论、和收藏回写到数据库2)你刚刚说定时用到了@schedule注解,那如果是6台服务器去回写,怎么保证一致性,你会怎么做3)雪花算法的核心概念讲一下,它的缺点在哪,它在部分场景下会失效,有什么更好的ID生成方法吗4)两个项目的消息队列用的是什么,为什么要用rabbitMQ和Kafka4.八股1)反射的缺点是什么2)注解的底层原理是什么3)讲一下JVM的运行时内存区域,各自的作用是什么,static修饰的成员变量放在哪4)讲一下类加载机制5)项目中有用到并发编程的地方吗6)讲一下线程安全类,说一两个,他们在项目中的使用场景7)concurrHashmap和hashmap的区别,在项目中有用到吗8)semaphore,countdownlatch,cyclicBarrier了解吗9)MySQL的锁机制,索引类型,为什么要用B+树10)redis的持久化过程11)怎么自定义Starter的,详细过程讲一下12)有读过框架的底层代码吗,mybatis,问了xml配置文件中,从前端到dao层的流程,xml配置文件中的sql语句是如何运行的13)项目管理除了maven,还有用到其它的吗
双非本科求职如何逆袭
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务