当前位置: 首页 > news >正文

【LeetCode】363. 矩形区域不超过 K 的最大数值和 (二分 + 前缀和)

363. 矩形区域不超过 K 的最大数值和 - 力扣(LeetCode)

题目:

思路:

面对这种计算矩形的题目,我们可以考虑枚举矩形的上下边界,然后依次遍历列来进行计算,这样能从 n²m² 优化至 n²m

本题让我们求满足矩形和 sum <= k 的最大 sum,那么如果直接暴力枚举矩形的端点显然是不行的,考虑优化

我们枚举矩形的上下边界,同时使用一个前缀和来储存矩形前 i 列的和,那么这样题目就相当于变成了:给你一个数组,让你求一个连续段不超过 k 的最大 sum

考虑当前第 z 列的前缀和 s,如果我们要让其和最大,那么之前的端点就要满足 sum[z] - sum[l] = k 即 sum[l] = sum[z] - k = s - k

如果暴力查找显然是会超时的,所以不妨考虑二分,我二分出第一个大于等于 s-k 的 sum[l],然后计算即可

具体实现看代码,很简单,特别注意初始化 ans 为负无穷大,因为矩阵的和能是负数

代码:

class Solution {
public:int maxSumSubmatrix(vector<vector<int>>& matrix, int k) {int ans = -1e9;int n = matrix.size();int m = matrix[0].size();for(int i = 0;i < n;i++){vector<int> sum(m,0);for(int j = i;j < n;j++){for(int z = 0;z < m;z++){sum[z] += matrix[j][z];}set<int> st;st.insert(0);int s = 0;for(auto & x : sum){s+=x;auto l = st.lower_bound(s-k);if(l != st.end()) ans = max(ans,s - *l);st.insert(s);}}}return ans;}
};

http://www.dtcms.com/a/347597.html

相关文章:

  • 拓扑排序|hash
  • 深入剖析Spring Boot应用启动全流程
  • MySQL GPG 密钥更新问题解决文档
  • Centos7.9 Docker26容器化部署 MySql9.4 一主一从的同步复制部署
  • 【51单片机非精准延时演示来回流水灯效果】2022-11-10
  • 【机器学习深度学习】自然语言与多模态大模型
  • 【KO】前端面试一
  • git的工作使用中实际经验
  • 关于Highcharts的数据参考与产品系列
  • Camera performance analysis
  • 智能系统与未来生态演进初步思考
  • 告别图片背景违和!autohue.js 让图片与背景自动 “无缝衔接”
  • 基于51单片机自动智能浇花系统设计
  • 【序列晋升】13 Spring Cloud Bus微服务架构中的消息总线
  • 研究生方向:在传统赛道与交叉领域间寻找破局之路
  • 第三阶段数据库-2:数据库中的sql语句
  • 重审文字的本体论地位:符号学转向、解构主义突围与视觉性革命
  • 1电吉他环境搭建:效果器再探
  • C++算法题—— 小C的细菌(二维偏序离线 + 树状数组 + 坐标压缩)
  • [激光原理与应用-328]:结构设计 - Solidworks - 什么是结构建模?
  • PCB电路设计学习3 电路原理图设计 元件PCB封装设计与添加
  • 学习嵌入式第三十六天
  • 神经网络|(十三)概率论基础知识-贝叶斯公式和全概率公式
  • More Effective C++ 条款04:非必要不提供默认构造函数
  • c++string
  • 【计算机网络 | 第8篇】编码与调制
  • 青少年机器人技术(二级)等级考试试卷-实操题(2024年9月)
  • 笔试——Day47
  • 张老师---个人师资介绍
  • python学习DAY49打卡