🎬 HoRain云小助手个人主页

 🔥 个人专栏: 《Linux 系列教程》《c语言教程

⛺️生活的理想,就是为了理想的生活!


⛳️ 推荐

前些天发现了一个超棒的服务器购买网站,性价比超高,大内存超划算!忍不住分享一下给大家。点击跳转到网站。

专栏介绍

专栏名称

专栏介绍

《C语言》

本专栏主要撰写C干货内容和编程技巧,让大家从底层了解C,把更多的知识由抽象到简单通俗易懂。

《网络协议》

本专栏主要是注重从底层来给大家一步步剖析网络协议的奥秘,一起解密网络协议在运行中协议的基本运行机制!

《docker容器精解篇》

全面深入解析 docker 容器,从基础到进阶,涵盖原理、操作、实践案例,助您精通 docker。

《linux系列》

本专栏主要撰写Linux干货内容,从基础到进阶,知识由抽象到简单通俗易懂,帮你从新手小白到扫地僧。

《python 系列》

本专栏着重撰写Python相关的干货内容与编程技巧,助力大家从底层去认识Python,将更多复杂的知识由抽象转化为简单易懂的内容。

《试题库》

本专栏主要是发布一些考试和练习题库(涵盖软考、HCIE、HRCE、CCNA等)

目录

⛳️ 推荐

专栏介绍

重构 2 行二进制矩阵的 Python 解法

方法思路

解决代码

代码解释


img

重构 2 行二进制矩阵的 Python 解法

您的问题是关于重构一个 2 行二进制矩阵的算法,给定第 0 行的元素之和 upper、第 1 行的元素之和 lower,以及一个表示每列元素之和的数组 colsum。我将使用 Python 实现一个高效的贪心算法来解决这个问题。

方法思路

  1. ​初始检查​​:首先计算 colsum的总和,如果其不等于 upper + lower,则无法重构,直接返回空列表。

  2. ​初始化结果矩阵​​:创建一个 2 行 n 列的矩阵,所有元素初始化为 0。

  3. ​处理每列​​:

    • 如果 colsum[i]为 2,则矩阵的两行在该列都必须为 1,同时减少 upperlower各 1。

    • 如果 colsum[i]为 1,则根据当前 upperlower的大小决定将 1 放在哪一行(优先放在剩余和较大的行),并减少相应的和。

  4. ​有效性检查​​:在处理过程中,如果 upperlower变为负数,说明无法重构,返回空列表。最后检查 upperlower是否恰好为 0,否则返回空列表。

该方法的时间复杂度为 O(n),其中 n 是 colsum的长度,空间复杂度为 O(n),用于存储结果矩阵。

解决代码

def reconstructMatrix(upper, lower, colsum):
    n = len(colsum)
    total_sum = sum(colsum)
    if total_sum != upper + lower:
        return []
    
    res = [[0] * n for _ in range(2)]
    
    for i in range(n):
        if colsum[i] == 2:
            res[0][i] = 1
            res[1][i] = 1
            upper -= 1
            lower -= 1
            if upper < 0 or lower < 0:
                return []
        elif colsum[i] == 1:
            if upper > lower:
                res[0][i] = 1
                upper -= 1
                if upper < 0:
                    return []
            else:
                res[1][i] = 1
                lower -= 1
                if lower < 0:
                    return []
    
    if upper != 0 or lower != 0:
        return []
    
    return res

代码解释

  1. ​初始检查​​:计算 colsum的总和,确保其等于 upper + lower,否则直接返回空列表。

  2. ​矩阵初始化​​:创建一个 2 行 n 列的矩阵,所有元素初始化为 0。

  3. ​处理每列​​:

    • ​对于 colsum[i] == 2​:设置两行当前列为 1,减少 upperlower各 1,并检查是否出现负数。

    • ​对于 colsum[i] == 1​:根据 upperlower的大小决定放置 1 的行,减少相应的和,并检查是否出现负数。

  4. ​最终检查​​:确保 upperlower恰好为 0,否则返回空列表。

  5. ​返回结果​​:如果所有检查通过,返回重构的矩阵。

这种方法确保了在满足条件的情况下高效地重构矩阵,同时处理了所有可能的无效情况。

❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄

💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍

🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐