日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

leetcode1292. 元素和小于等于阈值的正方形的最大边长(二分法+前缀和)

發布時間:2023/11/29 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 leetcode1292. 元素和小于等于阈值的正方形的最大边长(二分法+前缀和) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

給你一個大小為 m x n 的矩陣 mat 和一個整數閾值 threshold。

請你返回元素總和小于或等于閾值的正方形區域的最大邊長;如果沒有這樣的正方形區域,則返回 0 。
示例 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

代碼

class Solution {public int getMaxSideLength(int[][] mat,int x1,int y1,int x2,int y2) {return mat[x2][y2]-mat[x1-1][y2]-mat[x2][y1-1]+mat[x1-1][y1-1];//獲取正方形的和}public int maxSideLength(int[][] mat, int threshold) {int n=mat.length,m=mat[0].length;int[][] add=new int[n+1][m+1];for(int i=1;i<=n;i++)//構建前綴和for(int j=1;j<=m;j++){add[i][j]=add[i][j-1]+add[i-1][j]-add[i-1][j-1]+mat[i-1][j-1];}int l=1,r= Math.min(n,m),res=0;while (l<=r)//二分法查找最大邊長{boolean find=false;int mid=(r-l)/2+l;for(int i=1;i<=n-mid+1;i++)//查找滿足的正方形for(int j=1;j<=m-mid+1;j++)if(getMaxSideLength(add,i,j,i+mid-1,j+mid-1)<=threshold){find=true;}if(find)//找到了滿足的邊長,嘗試更大的{res=mid;l=mid+1;}else r=mid-1;}return res;} }

總結

以上是生活随笔為你收集整理的leetcode1292. 元素和小于等于阈值的正方形的最大边长(二分法+前缀和)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。