华为OD机试Java题解:统计匹配的二元组个数(题号:2025A卷)

最新华为OD机试

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

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

https://blog.csdn.net/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 的长度)。这种方式在数组长度较大时,效率非常低,容易超时。

    <

    作者:算法大师

    物联沃分享整理
    物联沃-IOTWORD物联网 » 华为OD机试Java题解:统计匹配的二元组个数(题号:2025A卷)

    发表回复