LeetCode(1292):元素和小于等于阈值的正方形的最大边长 Maximum Side Length of a Square(Java)
2020.12.24 LeetCode 从零单刷个人笔记整理(持续更新)
github:https://github.com/ChopinXBP/LeetCode-Babel
原地动态规划 + 前缀和。
遍历每一个位置ij时,将该位的数值置为从该位起左边的数字和,例如对于矩阵
[1,1,3,2],[1,1,4,3],[1,2,4,2]
遍历结束后效果为:
[1,2,5,7],[1,2,6,9],[1,3,7,9]
为了统计正方形矩阵的面积,可以假定当前位置ij为正方形的右下角点,这个正方形可能的最大边长为maxlen = Math.min(i, j) + 1。
沿着同一列j向上遍历(也可以优化为二分搜索),遍历行数即为当前正方形的边长len,利用前缀和可以求得当前正方形的每一行的面积rowarea。
rowarea = mat[row][j] - mat[row][j - len];
再将所有行面积遍历加和即可得到正方形的面积。取满足面积要求的最大边长即可。
传送门:元素和小于等于阈值的正方形的最大边长
Given a m x n matrix mat and an integer threshold.
Return the maximum side-length of a square with a sum less than or equal to threshold or return 0 if there is no such square.
给你一个大小为 m x n 的矩阵 mat 和一个整数阈值 threshold。
请你返回元素总和小于或等于阈值的正方形区域的最大边长;如果没有这样的正方形区域,则返回 0 。
示例 1:
输入:mat = [[1,1,3,2,4,3,2],[1,1,3,2,4,3,2],[1,1,3,2,4,3,2]], threshold = 4
输出:2
解释:总和小于 4 的正方形的最大边长为 2,如图所示。示例 2:
输入:mat = [[2,2,2,2,2],[2,2,2,2,2],[2,2,2,2,2],[2,2,2,2,2],[2,2,2,2,2]], threshold = 1
输出:0示例 3:
输入:mat = [[1,1,1,1],[1,0,0,0],[1,0,0,0],[1,0,0,0]], threshold = 6
输出:3示例 4:
输入:mat = [[18,70],[61,1],[25,85],[14,40],[11,96],[97,96],[63,45]], threshold = 40184
输出:2提示:
1 <= m, n <= 300
m == mat.length
n == mat[i].length
0 <= mat[i][j] <= 10000
0 <= threshold <= 10^5
package Problems;/**** Given a m x n matrix mat and an integer threshold.* Return the maximum side-length of a square with a sum less than or equal to threshold or return 0 if there is no such square.* 给你一个大小为 m x n 的矩阵 mat 和一个整数阈值 threshold。* 请你返回元素总和小于或等于阈值的正方形区域的最大边长;如果没有这样的正方形区域,则返回 0 。**/public class MaximumSideLengthOfASquareWithSumLessThanOrEqualToThreshold {public int maxSideLength(int[][] mat, int threshold) {int result = 0;for(int i = 0; i < mat.length; i++) {for(int j = 0; j < mat[0].length; j++) {if(j != 0){mat[i][j] += mat[i][j - 1];}int len = 0;int maxlen = Math.min(i, j) + 1;while(len < maxlen){int area = 0;for(int k = 0; k < len + 1; k++) {int prefix = j - len - 1 < 0 ? 0 : mat[i - k][j - len - 1];area += mat[i - k][j] - prefix;}if(area > threshold){break;}len++;}result = len > result ? len : result;}}return result;}
}
#Coding一小时,Copying一秒钟。留个言点个赞呗,谢谢你#
LeetCode(1292):元素和小于等于阈值的正方形的最大边长 Maximum Side Length of a Square(Java)相关推荐
- LeetCode 1292. 元素和小于等于阈值的正方形的最大边长(DP)
1. 题目 给你一个大小为 m x n 的矩阵 mat 和一个整数阈值 threshold. 请你返回元素总和小于或等于阈值的正方形区域的最大边长: 如果没有这样的正方形区域,则返回 0 . 示例 1 ...
- 1292. 元素和小于等于阈值的正方形的最大边长-前缀和算法
1292. 元素和小于等于阈值的正方形的最大边长-前缀和算法 给你一个大小为 m x n 的矩阵 mat 和一个整数阈值 threshold. 请你返回元素总和小于或等于阈值的正方形区域的最大边长:如 ...
- 元素和小于等于阈值的正方形的最大边长(来源:力扣(LeetCode))
元素和小于等于阈值的正方形的最大边长(来源:力扣(LeetCode)) 给你一个大小为 m x n 的矩阵 mat 和一个整数阈值 threshold.请你返回元素总和小于或等于阈值的正方形区域的最大 ...
- leetcode1292. 元素和小于等于阈值的正方形的最大边长(二分法+前缀和)
给你一个大小为 m x n 的矩阵 mat 和一个整数阈值 threshold. 请你返回元素总和小于或等于阈值的正方形区域的最大边长:如果没有这样的正方形区域,则返回 0 . 示例 2: 输入:ma ...
- Leetcode-元素和小于等于阈值的正方形的最大边长(python)
题目 给你一个大小为 m x n 的矩阵 mat 和一个整数阈值 threshold. 请你返回元素总和小于或等于阈值的正方形区域的最大边长:如果没有这样的正方形区域,则返回 0 . 示例 1: 输入 ...
- LeetCode Top 100 Liked Questions 221. Maximal Square (Java版; Medium)
welcome to my blog LeetCode Top 100 Liked Questions 221. Maximal Square (Java版; Medium) 题目描述 Given a ...
- 《LeetCode力扣练习》剑指 Offer 21. 调整数组顺序使奇数位于偶数前面 Java
<LeetCode力扣练习>剑指 Offer 21. 调整数组顺序使奇数位于偶数前面 Java 一.资源 题目: 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数在数组 ...
- 已知正方形面积求边长c语言,正方形知道面积怎么求边长.
2019-10-09阅读(206) 长方形的周长=(长+宽)×2正方形的周长=边长×4长方形的面积=长×宽正方形的面积=边长×边长三角形的面积=底×高÷2平行四边形的面积=底×高梯形的面积=(上底+下 ...
- LeetCode 1277. 统计全为 1 的正方形子矩阵(DP)
1. 题目 给你一个 m * n 的矩阵,矩阵中的元素不是 0 就是 1,请你统计并返回其中完全由 1 组成的 正方形 子矩阵的个数. 示例 1: 输入:matrix = [[0,1,1,1],[1, ...
最新文章
- J.U.C--locks--AQS分析
- python爬取豆瓣电影并分析_爬取豆瓣电影top250提取电影分类进行数据分析
- java英语介绍_java,英文介绍项目.doc
- 手写体识别(数据挖掘入门与实践-实验11)
- CreateProcess
- P4494-[HAOI2018]反色游戏【圆方树】
- java找不到符号类socket,编译报错+解决方法:错误: 找不到符号
- Java程序性能优化10
- 【antlr】antlr语法中的fragment
- 阅读SSM项目之scm【第一篇】
- poj 1159 Palindrome(dp)
- Java使用itextpdf生成PDF文件并添加斜面水印并完成下载(图片导出pdf)
- matlab符号函数绘图法_MATLAB符号运算实验
- 互联网周刊2022汽车智能服务企业TOP50
- rust语言和cargo介绍
- oracle gbk 转码,oracle编码格式从utf-8转换为GBK
- 关于系统安装之U盘制作【install.wim】
- python-Excel多个表格合并
- OpenCV | 直线拟合fitline函数
- vim的文件比较功能