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

高性能的网站建设指南长治网站seo

高性能的网站建设指南,长治网站seo,wordpress爬虫ca,搜索网站排名题目链接 Leetcode.1139 最大的以 1 为边界的正方形 Rating : 1744 题目描述 给你一个由若干 0 和 1 组成的二维网格 grid,请你找出边界全部由 1 组成的最大 正方形 子网格,并返回该子网格中的元素数量。 如果不存在,则返回 0。…

题目链接

Leetcode.1139 最大的以 1 为边界的正方形 Rating : 1744

题目描述

给你一个由若干 0 和 1 组成的二维网格 grid,请你找出边界全部由 1 组成的最大 正方形 子网格,并返回该子网格中的元素数量。

如果不存在,则返回 0。

示例 1:

输入:grid = [[1,1,1],[1,0,1],[1,1,1]]
输出:9

示例 2:

输入:grid = [[1,1,0,0]]
输出:1

提示:

  • 1<=grid.length<=1001 <= grid.length <= 1001<=grid.length<=100
  • 1<=grid[0].length<=1001 <= grid[0].length <= 1001<=grid[0].length<=100
  • grid[i][j]为 0 或 1

分析:

使用 dp 求解,我们定义 f(i,j,0)和f(i,j,1)f(i,j,0)和f(i,j,1)f(i,j,0)f(i,j,1)分别为以点 (i,j)结尾,向左 和 向上的连续 1的个数。

f(i,j,0)>0和f(i,j,1)>0f(i,j,0) > 0和f(i,j,1) > 0f(i,j,0)>0f(i,j,1)>0 的情况下,我们取 d=min(f(i,j,0),f(i,j,1))d = min(f(i,j,0),f(i,j,1))d=min(f(i,j,0),f(i,j,1))

遍历kkk (0<=k<=d)(0<=k<=d)(0<=k<=d),判断 f(i−k+1,j,0)>=k和f(i,j−k+1,1)>=kf(i-k+1,j,0) >= k 和 f(i,j-k+1,1) >= kf(ik+1,j,0)>=kf(i,jk+1,1)>=k,如果条件成立,说明可以构成一个最后一点是 (i,j),边长为 k的正方形。

时间复杂度:O(m∗n∗min(m∗n))O(m*n*min(m*n))O(mnmin(mn))

C++代码:

class Solution {
public:int largest1BorderedSquare(vector<vector<int>>& grid) {int m = grid.size(),n = grid[0].size();int f[m+1][n+1][2];memset(f,0,sizeof f);int ans = 0;for(int i = 1;i <= m;i++){for(int j = 1;j <= n;j++){//为1就记录if(grid[i-1][j-1]){f[i][j][0] = 1 + (j - 1 >= 1 ? f[i][j-1][0] : 0);f[i][j][1] = 1 + (i - 1 >= 1 ? f[i-1][j][1] : 0);}if(f[i][j][0] > 0 && f[i][j][1] > 0){int d = min(f[i][j][0],f[i][j][1]);//倒序判断能构成正方形的最大边长for(int k = d;k >= 0;k--){if(i-k+1 >= 1 && j-k+1 >= 1 && f[i-k+1][j][0] >= k && f[i][j-k+1][1] >= k){ans = max(ans,k*k);break;}}}}}return ans;}
};

Java代码:

class Solution {public int largest1BorderedSquare(int[][] grid) {int m = grid.length,n = grid[0].length;int[][][] f = new int[m+1][n+1][2];int ans = 0;for(int i = 1;i <= m;i++){for(int j = 1;j <= n;j++){if(grid[i-1][j-1]==1){f[i][j][0] = 1 + (j - 1 >= 1 ? f[i][j-1][0] : 0);f[i][j][1] = 1 + (i - 1 >= 1 ? f[i-1][j][1] : 0);}if(f[i][j][0] > 0 && f[i][j][1] > 0){int d = Math.min(f[i][j][0],f[i][j][1]);for(int k = d;k >= 0;k--){if(i-k+1 >= 1 && j-k+1 >= 1 && f[i-k+1][j][0] >= k && f[i][j-k+1][1] >= k){ans = Math.max(ans,k*k);break;}}}}}return ans;}
}
http://www.hrbkazy.com/news/7835.html

相关文章:

  • 杭州做网站制作好的竞价托管公司
  • 网站如何设置默认首页免费网站怎么申请
  • php做网站csdn无锡谷歌优化
  • 企业所得税2020最新seo推广外包
  • 国外ps素材网站百度快照推广有效果吗
  • 最好的建设网站汕头网站建设开发
  • 西安个人建网站知乎推广
  • 菏泽市建设银行网站制作一个网站需要多少费用
  • 可以自己做logo的网站seo优化是什么意思
  • 菏泽做网站电话舆情服务公司
  • 网站开发 书籍天津关键词排名提升
  • 东莞建英文网站的公司百度经验手机版官网
  • 漂流瓶说自己是做网站的营销型网站建设策划书
  • wordpress高速优化网站seo策划方案实例
  • 网站信息真实性核验单推广吧
  • 南通住房和城乡建设局网站媒体发布平台
  • 网站建设未完成百度不收录网站
  • 如何开始做婚恋网站最专业的seo公司
  • 河北雄安新区规划建设局网站网站优化人员通常会将目标关键词放在网站首页中的
  • 网站优惠券怎么做的营销策略手段有哪些
  • 徐州网站推广网络营销专业代码
  • 商业网站建立上海今天刚刚发生的新闻
  • 博兴做网站一般网站推广要多少钱
  • 做网站需要注册什么公司网络营销外包收费
  • python代码网站教育培训报名
  • 汾湖做网站网络营销的表现形式有哪些
  • 做网站有哪些类型seo营销优化软件
  • 玉环做网站有哪些广告推广怎么找客户
  • 做镜像网站chrome手机版
  • 有哪些中文域名网站网络优化公司