文章目录

  • 1. 题目
  • 2. 解题

1. 题目

给你一个二进制矩阵 matrix ,它的大小为 m x n ,你可以将 matrix 中的 按任意顺序重新排列

请你返回最优方案下将 matrix 重新排列后,全是 1 的子矩阵面积。

示例 1:

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

示例 2:

输入:matrix = [[1,0,1,0,1]]
输出:3
解释:你可以按照上图方式重新排列矩阵的每一列。
最大的全 1 子矩阵是上图中加粗的部分,面积为 3 。示例 3:
输入:matrix = [[1,1,0],[1,0,1]]
输出:2
解释:由于你只能整列整列重新排布,
所以没有比面积为 2 更大的全 1 子矩形。示例 4:
输入:matrix = [[0,0],[0,0]]
输出:0
解释:由于矩阵中没有 1 ,
没有任何全 1 的子矩阵,所以面积为 0 。提示:
m == matrix.length
n == matrix[i].length
1 <= m * n <= 10^5
matrix[i][j] 要么是 0 ,要么是 1 。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/largest-submatrix-with-rearrangements
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

类似题目:
LeetCode 1277. 统计全为 1 的正方形子矩阵(DP)
LeetCode 1504. 统计全 1 子矩形(记录左侧的连续1的个数)

  • 计算列的前缀和
  • 将每行为底边,且高度不为0的列排序,计算最大矩形面积
class Solution {public:int largestSubmatrix(vector<vector<int>>& matrix) {int m = matrix.size(), n = matrix[0].size();vector<vector<int>> h(matrix);int area = 0;for(int i = 0; i < m; i++){vector<int> height;for(int j = 0; j < n; j++){if(matrix[i][j] == 0)h[i][j] = 0;elseh[i][j] += i > 0 ? h[i-1][j] : 0;//前缀和if(h[i][j] > 0)height.push_back(h[i][j]);}sort(height.begin(), height.end());//排序int width = height.size();//宽度for(int k = 0; k < width; k++){area = max(area, height[k]*(width-k));}                  // 当前高 * 剩余宽度}return area;}
};

252 ms 81.8 MB C++


我的CSDN博客地址 https://michael.blog.csdn.net/

长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!

LeetCode 1727. 重新排列后的最大子矩阵(前缀和+排序)相关推荐

  1. LeetCode 5655 重新排列后的最大子矩阵

    LeetCode 5655 重新排列后的最大子矩阵 题目链接 给你一个二进制矩阵 matrix ,它的大小为 m x n ,你可以将 matrix 中的 列 按任意顺序重新排列. 请你返回最优方案下将 ...

  2. 5655. 重新排列后的最大子矩阵

    5655. 重新排列后的最大子矩阵 难度中等18 给你一个二进制矩阵 matrix ,它的大小为 m x n ,你可以将 matrix 中的 列 按任意顺序重新排列. 请你返回最优方案下将 matri ...

  3. leetcode:224周赛:5655. 重新排列后的最大子矩阵(中等)

    题目: 分析: 还行自己写出来啦. 思路: 1.变标注,值为该列从该位置开始连续1的个数, 2.枚举,从i=1~n,底边为i的矩形的最大高度.一个三重循环. 代码: class Solution {p ...

  4. LeetCode 1451. 重新排列句子中的单词(桶排序)

    1. 题目 「句子」是一个用空格分隔单词的字符串.给你一个满足下述格式的句子 text : 句子的首字母大写 text 中的每个单词都用单个空格分隔. 请你重新排列 text 中的单词,使所有单词按其 ...

  5. LeetCode 1528. 重新排列字符串

    给你一个字符串 s 和一个 长度相同 的整数数组 indices . 请你重新排列字符串 s ,其中第 i 个字符需要移动到 indices[i] 指示的位置. 返回重新排列后的字符串. 输入:s = ...

  6. LeetCode 937. 重新排列日志文件 / 1823. 找出游戏的获胜者(约瑟夫环问题) / 713. 乘积小于 K 的子数组

    937. 重新排列日志文件 2022.5.3 每日一题 题目描述 给你一个日志数组 logs.每条日志都是以空格分隔的字串,其第一个字为字母与数字混合的 标识符 . 有两种不同类型的日志: 字母日志: ...

  7. LeetCode之重新排列字符串(五千四百七十二)

    目录 题目 解题 方法一.直接法 方法二.转换法 题目 (原题链接:https://leetcode-cn.com/problems/shuffle-string/) 给你一个字符串 s 和一个 长度 ...

  8. 给定两个字符串,确定其中一个字符串的字符重新排列后,能否变成另一个字符串...

    1 /* 2 * 给定两个字符串,确定其中一个字符串的字符重新排列后,能否变成另一个字符串,其实也就是变位词问题 3 * 比如说 a='abc' b='acb'是可以通过a变成b的 4 * 思路; 5 ...

  9. python随机产生10个数然后前5个升序后5个降序_编写程序,生成包含 20 个随机数的列表,然后将前 10 个元素升序排列,后 10 个元素降序排列,并输出结果。_学小易找答案...

    [填空题]在 Python3.x 中 input() 函数接收到的用户输入数据一律为 ________ . [填空题]运算符% (可以.不可以)对浮点数进行求余数操作. [简答题]解释 Python ...

最新文章

  1. 决策树算法(一)——一些重要的数学概念
  2. 关于按值传递和按引用传递(送给这个方面的新手——包括我自己)
  3. pyqt5窗口之间传递信号_pyQT5 实现窗体之间传值的示例
  4. 不安装游戏apk直接启动法
  5. 谷歌浏览器怎么设置点击书签 谷歌浏览器如何设置点击书签
  6. 2017.5.25-5.28 hide捉迷藏 失败总结
  7. AcWing 898. 数字三角形
  8. PowerPivot 和 SQL Azure 快速入门
  9. 【手写数字识别】基于matlab GUI BP神经网络手写数字识别(手写+带面板)【含Matlab源码 1196期】
  10. 【2015-2016 NEERC - G】Graph【构造 + 拓扑排序】
  11. linux中的各种$号 位置参数变量
  12. 计算机怎么接入外接键盘,联想笔记本怎么外接键盘驱动 笔记本外接键盘驱动方法...
  13. FFmpeg的下载及其简单使用
  14. VBS/BAT使用/恶搞(操作+图示)
  15. 直播电商系统源码 直播系统源码
  16. 用SmartUpload实现文件上传,下载,删除
  17. ffmpeg音频合并生成新的音频文件
  18. 克里斯·弗雷格利(Chris Fregly)在PANCAKE STACK研讨会和数据管道上
  19. 微型计算机控制数字量输入输出,计算机控制系统输入/输出通道
  20. iOS开发 --- AlipaySDK接入(version:15.6.4 motify:2019.06.11)

热门文章

  1. php 扩展 返回字符串,基于PHP7的PHP扩展开发之四(字符串的处理)
  2. $.ajax 同步一不,ajax 同步不生效
  3. php开启错误日志,PHP开启error_log 错误日志
  4. 通过stream去重_stream去重
  5. JSONObject,JSONArray,对象,数组互相转化
  6. Newtonsoft.Json 获取匿名类数据
  7. loadrunner11安装,提示少了Microsoft Visual c++2005 sp1运行时组件解决办法
  8. FTP 协议和 HTTP 协议的比较
  9. 没有理智的欲望会走向毁灭,没有欲望的理智会永守清贫
  10. 使用bootstrap-table插件