华为OD机试2025A卷 - 统计匹配的二元组个数(Java & Python& JS & C++ & C )

最新华为OD机试

真题目录:点击查看目录
华为OD面试真题精选:点击立即查看

本题与2023年A卷基本一致:

https://blog.youkuaiyun.com/banxia_frontend/article/details/133105425

题目描述

给定两个数组A和B,若数组A的某个元素A[i]与数组B中某个元素B[j]满足 A[i] == B[j],则寻找到一个值匹配的二元组(i,j)。 请统计在这两个数组A和B中,一共存在多少个这样的二元组。

输入描述

  • 第一行输入数组A的长度M
  • 第二行输入数组B的长度N
  • 第三行输入数组A的值
  • 第四行输入数组B的值

备注: 若不存在相等的值,则输出0。 所采用的算法复杂度需小于O(N^2),否则会超时。 输入数组中允许出现重复数字,一个数字可以匹配多次。

输出描述

输出匹配的二元组个数

示例1

输入

5
4
1 2 3 4 5
4 3 2 1

输出

4

示例2

输入

6
3
1 2 4 4 2 1
1 2 3

输出

4

示例3

输入

4
1
1 2 3 4
1

输出

1

示例4

输入

6
3
1 1 2 2 4 5
2 2 4

输出

5

解题思路

本题要求统计在两个数组 AB 中,所有匹配的二元组 (i, j),即 A[i] == B[j] 的组合。由于直接使用暴力算法会导致时间复杂度达到 O(N^2),我们需要通过优化来降低时间复杂度。

1. 暴力算法的不足

直接使用暴力算法遍历数组 A 和 B 中的每一个元素对,检查 A[i] == B[j] 是否成立,显然会导致 O(m * n) 的时间复杂度(其中 mn 分别是数组 A 和 B 的长度)。这种方式在数组长度较大时,效率非常低,容易超时。

2. **优化方法:哈希表

为了提高效率,我们可以利用哈希表(Hash Table)来记录每个元素在数组 A 和 B 中的出现次数。这样,我们可以将查找和统计的操作从 O(N) 降低到 O(1),大大提高效率。

  • 步骤 1:统计每个元素的出现次数

    • 遍历数组 A,使用哈希表 countA 记录数组 A 中每个元素的出现次数。
    • 遍历数组 B,使用哈希表 countB 记录数组 B 中每个元素的出现次数。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

算法大师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值