排序题目:重新排列后的最大子矩阵

news2024/11/6 9:48:31

文章目录

  • 题目
    • 标题和出处
    • 难度
    • 题目描述
      • 要求
      • 示例
      • 数据范围
  • 解法
    • 思路和算法
    • 代码
    • 复杂度分析

题目

标题和出处

标题:重新排列后的最大子矩阵

出处:1727. 重新排列后的最大子矩阵

难度

7 级

题目描述

要求

给定一个大小为 m × n \texttt{m} \times \texttt{n} m×n 的二进制矩阵 matrix \texttt{matrix} matrix,可以将 matrix \texttt{matrix} matrix 中的按任意顺序重新排列。

返回将 matrix \texttt{matrix} matrix 按照最优方案重新排列后,全是 1 \texttt{1} 1 的最大子矩阵面积。

示例

示例 1:

示例 1

输入: matrix   =   [[0,0,1],[1,1,1],[1,0,1]] \texttt{matrix = [[0,0,1],[1,1,1],[1,0,1]]} matrix = [[0,0,1],[1,1,1],[1,0,1]]
输出: 4 \texttt{4} 4
解释:可以按照上图方式重新排列矩阵的每一列。最大的全 1 \texttt{1} 1 子矩阵是上图中加粗的部分,面积为 4 \texttt{4} 4

示例 2:

示例 2

输入: matrix   =   [[1,0,1,0,1]] \texttt{matrix = [[1,0,1,0,1]]} matrix = [[1,0,1,0,1]]
输出: 3 \texttt{3} 3
解释:可以按照上图方式重新排列矩阵的每一列。最大的全 1 \texttt{1} 1 子矩阵是上图中加粗的部分,面积为 3 \texttt{3} 3

示例 3:

输入: matrix   =   [[1,1,0],[1,0,1]] \texttt{matrix = [[1,1,0],[1,0,1]]} matrix = [[1,1,0],[1,0,1]]
输出: 2 \texttt{2} 2
解释:由于只能按整列重新排布,所以没有比面积为 2 \texttt{2} 2 更大的全 1 \texttt{1} 1 子矩形。

数据范围

  • m = matrix.length \texttt{m} = \texttt{matrix.length} m=matrix.length
  • n = matrix[i].length \texttt{n} = \texttt{matrix[i].length} n=matrix[i].length
  • 1 ≤ m × n ≤ 10 5 \texttt{1} \le \texttt{m} \times \texttt{n} \le \texttt{10}^\texttt{5} 1m×n105
  • matrix[i][j] \texttt{matrix[i][j]} matrix[i][j] 0 \texttt{0} 0 1 \texttt{1} 1

解法

思路和算法

由于对矩阵重新排列的规则是按整列重新排列,因此可以对矩阵的每一列做预处理,对于每个元素 1 1 1,计算该元素向上的最大连续 1 1 1 的个数,然后即可单独处理矩阵的每一行。

经过预处理之后,矩阵中的每个元素更新为该元素向上的最大连续 1 1 1 的个数。如果更新后的矩阵中,某一行有 x x x 个元素不小于 y y y x x x y y y 都是正整数),则说明可以将原矩阵重新排列,使得重新排列的矩阵中存在一个以该行为底边的全 1 1 1 子矩阵,该子矩阵的宽度是 x x x,高度是 y y y,面积是 x y xy xy

为了得到最大全 1 1 1 子矩阵的面积,可以将更新后的矩阵的每一行排序,然后对矩阵的每一行按照从大到小的顺序遍历,计算以该行为底边的最大全 1 1 1 子矩阵面积。

对于矩阵的某一行,假设第 k k k 大的元素是 val k \textit{val}_k valk k ≥ 1 k \ge 1 k1),则该行有至少 k k k 个元素不小于 val k \textit{val}_k valk k k k 个最大元素组成的全 1 1 1 子矩阵面积是 val k × k \textit{val}_k \times k valk×k。从大到小遍历该行的每个元素,当元素大于 0 0 0 时使用元素值与元素的排序编号(第 k k k 大的元素的排序编号是 k k k)计算全 1 1 1 子矩阵面积,并维护最大全 1 1 1 子矩阵面积。当遍历到等于 0 0 0 的元素时,该行剩余的元素都是 0 0 0,该行内不可能再遇到全 1 1 1 子矩阵,因此结束遍历该行。

遍历更新后的矩阵的每一行之后,即可得到最大全 1 1 1 子矩阵面积。

代码

class Solution {
    public int largestSubmatrix(int[][] matrix) {
        int maxArea = 0;
        int m = matrix.length, n = matrix[0].length;
        for (int i = 1; i < m; i++) {
            for (int j = 0; j < n; j++) {
                if (matrix[i][j] == 1) {
                    matrix[i][j] = matrix[i - 1][j] + 1;
                }
            }
        }
        for (int i = 0; i < m; i++) {
            int[] row = matrix[i];
            Arrays.sort(row);
            for (int j = n - 1, k = 1; j >= 0 && row[j] > 0; j--, k++) {
                int area = row[j] * k;
                maxArea = Math.max(maxArea, area);
            }
        }
        return maxArea;
    }
}

复杂度分析

  • 时间复杂度: O ( m n log ⁡ n ) O(mn \log n) O(mnlogn),其中 m m m n n n 分别是矩阵 matrix \textit{matrix} matrix 的行数和列数。遍历并更新矩阵需要 O ( m n ) O(mn) O(mn) 的时间,对更新后的矩阵的每一行排序共需要 O ( m n log ⁡ n ) O(mn \log n) O(mnlogn) 的时间,计算最大面积需要 O ( m n ) O(mn) O(mn) 的时间,时间复杂度是 O ( m n log ⁡ n ) O(mn \log n) O(mnlogn)

  • 空间复杂度: O ( log ⁡ n ) O(\log n) O(logn),其中 n n n 是矩阵 matrix \textit{matrix} matrix 的列数。对更新后的矩阵的每一行排序需要 O ( log ⁡ n ) O(\log n) O(logn) 的递归调用栈空间。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2180535.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

第三方供应商不提供API接口?教你四步破解集成难题

API开放需求 在企业数字化转型过程中&#xff0c;异构系统之间的连接是信息化阶段不可或缺的一环。通过应用API&#xff0c;企业能够实现不同系统、平台和应用之间的数据交换与功能调用&#xff0c;从而形成端到端的业务流程协同。然而&#xff0c;很多企业在集成第三方供应商…

web应用合规(一)双因子认证2FA解决方案

文章目录 背景知识什么是2FA认证因子分类知识因素持有因素 解决方案密码 OTP密码 TOTP方案对比 参考文档后记 最近做海外项目&#xff0c;对合规方面的要求比较高&#xff0c;写一篇流水账来记录下 登录时的双因子认证过程&#xff0c;于是开启了2FA&#xff08;2 factor au…

CTF网络安全大赛_网安战队简历

CTF网络安全大赛 CTF比赛介绍 CTF&#xff08;Capture The Flag&#xff0c;中文&#xff1a;夺旗赛&#xff09;是网络安全领域中一种信息安全竞赛形式&#xff0c;起源于1996年。DEFCON全球黑客大会&#xff0c;代替了之前黑客们通过互相发起真实攻击进行技术比拼的方式。参…

Shopee虾皮店铺难出爆品?你可能忘了测款!

大部分Shopee虾皮卖家可能都经历过店铺销量一直平平无奇、较长时间出不了爆品的情况&#xff0c;明明做足了功课&#xff0c;为什么还会出现这种现象&#xff1f;那有可能是店铺运营没有明确的重点&#xff0c;太“雨露均沾”反而难以显著提升销量&#xff0c;应该对一个或部分…

西语中关于拆盲盒的表达是什么?柯桥西语口语培训

拆盲盒常常要靠运气。那么西语中有哪些相关的表达呢&#xff1f; 好运 buena suerte - tener &#xff08;buena&#xff09;suerte 最常用的形容“好运”的表达。可以说tener suerte de hacer algo&#xff0c;运气好而做成某事。 - ¡Vaya potra! / ¡Qu potra! 用…

兴业周报|十一黄金周即将到来~楼市利好政策重磅来袭

黄金地段&#xff1a;社区位于东三环核心位置&#xff0c;定位于CBD商务圈旁的纯居住区&#xff0c;容积率不足2.8&#xff0c;绿化率达到50%以上&#xff0c;树种超过80余种&#xff0c;实现“每个楼座都在园林中”的效果。 配套成熟&#xff1a;周边配套齐全&#xff0c;富力…

Error和Exception

1.异常体系结构 &#xff08;1&#xff09;Java把异常当作对象处理&#xff0c;定义一个基类java.lang.Throwable作为所有异常的超类。 &#xff08;2&#xff09;Java API中定义了许多异常类&#xff0c;这些异常类分为两大类&#xff0c;错误Error和异常Exception 2.什么是…

湿气缠身不用愁,拔罐疗法助你轻松“祛湿”!

在这个快节奏的时代&#xff0c;我们常常忽略了身体发出的微妙信号&#xff0c;其中&#xff0c;“湿气重”便是许多现代人面临的隐形健康挑战。湿气&#xff0c;中医理论中的一个重要概念&#xff0c;它像无形的枷锁&#xff0c;悄悄影响着我们的体态、精神状态乃至生活质量。…

react-问卷星项目(3)

项目实战 React Hooks 缓存&#xff0c;性能优化&#xff0c;提升时间效率&#xff0c;但是不要为了技术而优化&#xff0c;应该是为了业务而进行优化 内置Hooks保证基础功能&#xff0c;灵活配合实现业务功能&#xff0c;抽离公共部分&#xff0c;自定义Hooks或者第三方&am…

鸿蒙开发(NEXT/API 12)【穿戴设备信息查询】手机侧应用开发

// 在使用Wear Engine服务前&#xff0c;请导入WearEngine与相关模块 import { wearEngine } from kit.WearEngine; import { BusinessError } from kit.BasicServicesKit;查询穿戴设备是否支持某种WearEngine能力集 注意 该接口的调用需要在开发者联盟申请设备基础信息权限。…

Java 异常处理机制

目录 1.异常处理的五个关键字 测试一&#xff1a;理解try catch finally 的作用 测试二&#xff1a;设置想要捕获的异常类型 测试三&#xff1a;可以写多个catch。 2.异常快捷键 3.在方法体中抛出异常用throw&#xff1b;在方法参数后面抛出异常用throws &#xff08;1&…

Ubuntu 手动安装 ollama

官方linux安装ollama命令: curl -fsSL https://ollama.com/install.sh | sh 运行结果&#xff1a; 由于官方提供的ollama安装命令老是安装中断&#xff0c;所以我选择手动安装。 手动安装步骤&#xff1a; 官网链接&#xff1a;ollama/docs/linux.md at main ollama/ollama…

盛事启幕 | 第三届OpenHarmony技术大会重磅官宣,邀您共绘智联未来

未来已来&#xff0c;科技何向&#xff1f; ——10月12日-13日众多大咖齐聚上海 聚焦OpenHarmony生态前沿 与您一同解码技术的下一片蓝海

【STM32单片机_(HAL库)】4-1【定时器TIM】定时器中断点灯实验

1.硬件 STM32单片机最小系统LED灯模块 2.软件 timer驱动文件添加定时器HAL驱动层文件添加GPIO常用函数定时器中断配置流程main.c程序 #include "sys.h" #include "delay.h" #include "led.h" #include "timer.h"int main(void) {H…

seata服务端部署

1.下载seata 官网下载地址&#xff1a;http://seata.io/zh-cn/blog/download.html 或者下载 作者已经下载的压缩包1.4.0 注意&#xff01;&#xff01;&#xff01; 要参考对应的版本&#xff0c;否则可能出现无法正常启动的情况。 参考文档 下载完毕后解压压缩文件 2.修改配…

6个Android ANR面试题和优化方案

本文首发于公众号“AntDream”&#xff0c;欢迎微信搜索“AntDream”或扫描文章底部二维码关注&#xff0c;和我一起每天进步一点点 面试题 1、 解释什么是ANR以及它在Android中是如何产生的&#xff1f; ANR是指应用程序未响应&#xff0c;通常是因为主线程被阻塞导致无法及…

【性能测试】jmeter工具核心组件说明手册

前言 Apache JMeter 是一个用于压力测试和性能测量的开源工具&#xff0c;它被设计用来测试静态和动态资源&#xff08;例如静态文件、CGI接口、Java 对象、数据库和 FTP 服务器&#xff09;&#xff0c;以及分析整体系统性能。JMeter提供了丰富的组件集&#xff0c;使得用户可…

国内邮件推送防拦截秘籍与内容优化技巧详解

企业需优化邮件内容、选择优质服务商、配置域名验证&#xff0c;避免垃圾邮件特征&#xff0c;控制发送频率和策略&#xff0c;以提高邮件送达率和用户互动率。ZohoCampaigns等平台提供多项功能助力邮件营销。 一、了解邮件拦截的常见原因 在讨论如何避免邮件被拦截之前&#…

Cookie Session Token的各种知识

Session 1、为什么有session&#xff1f; 因为HTTP是无状态协议&#xff0c;每次请求服务器并不知道历史请求的记录&#xff0c;Session和Cookie主要就是为了弥补无状态的特性 2、Session是什么 客户端请求时&#xff0c;服务端开辟一块内存空间存放Session对象&#xff0c;存…

(二)大模型调用

一、基本概念 1.1、Prompt 大模型的所有输入&#xff0c;即&#xff0c;我们每一次访问大模型的输入为一个 Prompt&#xff0c; 而大模型给我们的返回结果则被称为 Completion。 1.2、Temperature LLM 生成是具有随机性的&#xff0c;在模型的顶层通过选取不同预测概率的预测结…