最新华为OD机试真题-矩阵匹配问题(200分)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员

💻 ACM金牌🏅️团队 | 编程一对一辅导

✨ 本系列打算持续跟新华为OD-D卷的三语言AC题解

👏 感谢大家的订阅➕ 和 喜欢💗 和手里的小花花🌸

最新华为OD机试D卷目录,全、新、准,题目覆盖率达 95% 以上,支持题目在线评测

最新华为OD机试目录: https://www.nowcoder.com/discuss/636153620743897088?sourceSSR=users

📎 在线评测链接

矩阵匹配问题(200分)

alt

🌍 评测功能需要 =>订阅专栏<= 后联系清隆解锁~

🍓OJ题目截图

alt

📞 矩阵匹配问题

问题描述

给定一个 的矩阵,从中选出 个数,要求任意两个数字不能在同一行或同一列。求选出来的 个数中第 大的数字的最小值。

输入格式

第一行包含三个正整数 ,分别表示矩阵的行数、列数和要求的第 大的数字。

接下来 行,每行包含 个整数,表示矩阵的元素。

输出格式

输出一个整数,表示选出的 个数中第 大的数字的最小值。

样例输入

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

样例输出

3

样例解释

在给定的 矩阵中,可以选出 种组合数组。每个组合数组中第 大的数中的最小值为

数据范围

  • 矩阵中的元素为正整数

题解

题目要求从矩阵中选出 个数,使得任意两个数字不能在同一行或同一列,并且这些数中第 大的数的最小值最小。可以使用二分查找和匈牙利算法来解决这个问题。

具体步骤

  1. 二分查找:我们需要找到一个数 ,使得矩阵中所有小于等于 的数可以构成一个满足条件的组合。为了找到这个 ,我们可以使用二分查找。
  2. 匈牙利算法:在每次二分查找的过程中,我们需要判断当前的 是否可以满足条件。这里我们使用匈牙利算法来进行二分图的最大匹配。匈牙利算法是一种用于解决二分图最大匹配问题的算法。

参考代码

  • Python
def find_match(x, mp, visited, match):
    for j in range(1, m + 1):
        if mp[x][j] and visited[j]:
            visited[j] = False
            if match[j] == 0 or find_match(match[j], mp, visited, match):
                match[j] = x
                return True
    return False

def check(p):
    mp = [[False] * (m + 1) for _ in range(n + 1)]
    for i in range(1, n + 1):
        for j in range(1, m + 1):
            mp[i][j] = (matrix[i][j] <= p)
    
    ans = 0
    match = [0] * (m + 1)
    for i in range(1, n + 1):
        visited = [True] * (m + 1)
        if find_match(i, mp, visited, match):
            ans += 1
    
    return ans >= n - k + 1

def solve(mx):
    l, r = 1, mx
    ans = 0
    while l <= r:
        mid = (l + r) // 2
        if check(mid):
            ans = mid
            r = mid - 1
        else:
            l = mid + 1
    return ans

n, m, k = map(int, input().split())
matrix = [[0] * (m + 1) for _ in range(n + 1)]
mx = 0

for i in range(1, n + 1):
    row = list(map(int, input().split()))
    for j in range(1, m + 1):
        matrix[i][j] = row[j - 1]
        mx = max(mx, matrix[i][j])

result = solve(mx)
print(result)
  • Java
import java.util.Scanner;
import java.util.Arrays;

public class Main {
    static int n, m, k;
    static int[][] matrix;

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        n = sc.nextInt();
        m = sc.nextInt();
        k = sc.next

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

最新华为OD机试-E+D卷 文章被收录于专栏

本专栏给大家提供了华为2024最新华为OD-E/D卷的题目汇总和(Java/Cpp/Python)三语言解析 + 部分题目提供OJ在线评测

全部评论

相关推荐

08-09 23:03
已编辑
门头沟学院 C++
稍微介绍一下背景&nbsp;24届的&nbsp;强目标院校&nbsp;软件工程专业&nbsp;在学校比较摆烂&nbsp;考研没考上&nbsp;无实习&nbsp;春招没面&nbsp;&nbsp;7月初毕业&nbsp;&nbsp;在boss上投了odC加加岗&nbsp;&nbsp;刷了半个月左右力扣8月2号星期五&nbsp;做的笔试&nbsp;满分过了&nbsp;笔试题都比较简单记不清题目了&nbsp;都没怎么看给的牛客题资料&nbsp;输入处理去特意看了&nbsp;考的题一些简单的数据结构就解决了&nbsp;没考dp和树啥的&nbsp;&nbsp;8月5号星期一&nbsp;交了点双证啥的材料&nbsp;做了下性格测试&nbsp;&nbsp;性格测试按照boss上小姐姐给的材料做就行&nbsp;&nbsp;(不用开摄像头录屏啥的)&nbsp;8月5号晚上&nbsp;资格面&nbsp;&nbsp;那边的hr问以下问题&nbsp;&nbsp;自我介绍在校经历参加过啥活动&nbsp;&nbsp;&nbsp;做过有意义的事&nbsp;&nbsp;有没有什么事自己做的不好&nbsp;期望薪资&nbsp;&nbsp;最后一个提问环节&nbsp;我问了下公司活动&nbsp;说是活动还挺多&nbsp;薪资组成&nbsp;基本工资加绩效&nbsp;&nbsp;绩效有考核&nbsp;说达到条件有转正机会&nbsp;&nbsp;聊下来还算比较轻松8月8号星期四&nbsp;技术一面&nbsp;先自我介绍&nbsp;&nbsp;然后介绍项目&nbsp;对项目提问&nbsp;问的一些技术点&nbsp;难点啥的&nbsp;&nbsp;往自己擅长的地方说就行&nbsp;&nbsp;手撕题&nbsp;&nbsp;两数相加(力扣25题)比较简单&nbsp;写完和他说下思路&nbsp;就过了&nbsp;然后问了八股&nbsp;快排、智能指针、多态、数组和链表的区别&nbsp;遍历起来哪个快、哈希&nbsp;最后问了个开放性问题&nbsp;怎么让代码写的正确质量高&nbsp;&nbsp;&nbsp;&nbsp;八股有些地方面试官故意往深问了点就没答上&nbsp;表现的中规中矩&nbsp;一个小时结束8月9号星期五&nbsp;技术二面&nbsp;上来手撕&nbsp;一个日志得分问题&nbsp;&nbsp;简单遍历一遍就行&nbsp;&nbsp;写完了和面试官说&nbsp;&nbsp;面试官说可以用dp&nbsp;是一个01背包问题&nbsp;&nbsp;不过我写的方法也很简单就没多说啥了&nbsp;&nbsp;随便问了几个八股&nbsp;&nbsp;二面面试官说是应届生就不咋问问题&nbsp;&nbsp;随便问了几个就结束了&nbsp;半个小时结束8月9号星期五下午&nbsp;主管面&nbsp;自我介绍&nbsp;对着简历上的项目让我说明自己做的工作&nbsp;问的还比较详细&nbsp;&nbsp;然后问了下了不了解公司&nbsp;&nbsp;我说在牛客上看过、听说加班比较多(只说了这个别的闭口不谈)那主管说牛客上不是很多黑料嘛😂我说不了解不知道&nbsp;&nbsp;然后问真不知道华为的核心价值观&nbsp;我说不知道&nbsp;然后告诉我说三句话&nbsp;以客户为中心&nbsp;以员工为本&nbsp;坚持长期艰苦奋斗&nbsp;问我怎么理解这三句话(🙃)&nbsp;随便扯了点&nbsp;然后让我提问&nbsp;问了下部门业务啥的&nbsp;然后结束了&nbsp;半个小时结束8月9号下午67点左右&nbsp;boss小姐姐告诉我过了&nbsp;薪资给我定了&nbsp;准备收offer&nbsp;#华为od#华为od华为od面经#
查看18道真题和解析
点赞 评论 收藏
分享
点赞 1 评论
分享
牛客网
牛客企业服务