首页 > 其他分享 >[leetcode每日一题]2.17

[leetcode每日一题]2.17

时间:2023-02-17 23:01:07浏览次数:56  
标签:int 每日 up maxBorder grid 2.17 border leetcode left

​1139. 最大的以 1 为边界的正方形​

难度中等192

给你一个由若干 ​​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 <= 100​
  • ​1 <= grid[0].length <= 100​
  • ​grid[i][j]​​ 为 ​​0​​ 或 ​​1​

Solution

先说说我的笨办法吧,从最大的可能边长开始,依次列举可能的矩形左上角位置。直到寻找到可能的位置。

class Solution {
public:
int largest1BorderedSquare(vector<vector<int>>& grid) {
int m = grid.size();
int n = grid[0].size();
int mx = min(m, n);
bool flag = true;
for(int i = mx;i > 0;i--){
// 横边
for(int x = 0;x<=m-i;x++){
for(int y = 0;y<=n-i;y++){
for(int k = 0;k < i;k++){
if(!grid[x+k][y] || !grid[x+i-1][y+k] || !grid[x+i-1-k][y+i-1] || !grid[x][y+i-1-k]){
flag = false;
break;
}
}
if(flag)return i*i;
flag = true;
}
}
}
return 0;
}
};

但是这样肯定是重复遍历了很多次,所以可以使用动态规划优化。

[leetcode每日一题]2.17_dp

class Solution:
def largest1BorderedSquare(self, grid):
m, n = len(grid), len(grid[0])
left = [[0] * (n + 1) for _ in range(m + 1)]
up = [[0] * (n + 1) for _ in range(m + 1)]
maxBorder = 0
for i in range(1, m + 1):
for j in range(1, n + 1):
if grid[i - 1][j - 1]:
left[i][j] = left[i][j - 1] + 1
up[i][j] = up[i - 1][j] + 1
border = min(left[i][j], up[i][j])
while left[i - border + 1][j] < border or up[i][j - border + 1] < border:
border -= 1
maxBorder = max(maxBorder, border)
return maxBorder ** 2

作者:LeetCode-Solution
链接:https://leetcode.cn/problems/largest-1-bordered-square/solution/zui-da-de-yi-1-wei-bian-jie-de-zheng-fan-74ce/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

标签:int,每日,up,maxBorder,grid,2.17,border,leetcode,left
From: https://blog.51cto.com/u_15763108/6064553

相关文章

  • 2.17 小随笔 暂断法
    输入密码出现对话框我们对api函数进行断点返回上一层函数看看1.改判断法......
  • misc图片隐写------2023.2.17
    1,查看属性2.伪装成图片的压缩包一般这种图片看起来和普通图片没什么区别,但其实这个图片是由压缩包伪装成的,一般flag的文本文件就藏在这个压缩包中3,修改图片宽高4,将flag......
  • 2023.2.17
    不知从什么时候开始记性变得不好,昨天记得有个被拿来和马库斯做过对比的巨人选手,结果费半天劲才想起来叫morganaste也许哪一天我就会啥也想不起来和何老师要了生日歌和生......
  • RSA常见题型------2023.2.17
    1,已知dp,dq求解m其中关系式如下:dp=d%(p-1)dq=d%(q-1)解题脚本:#!/usr/bin/python#coding:utf-8importgmpy2fromCrypto.Util.numberimportlong_to......
  • #yyds干货盘点# LeetCode程序员面试金典:排序矩阵查找
    题目:给定M×N矩阵,每一行、每一列都按升序排列,请编写代码找出某元素。示例:现有矩阵matrix如下:[ [1, 4, 7,11,15], [2, 5, 8,12,19], [3, 6, 9,......
  • #yyds干货盘点# LeetCode面试题:电话号码的字母组合
    题目:给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按任意顺序返回。给出数字到字母的映射如下(与电话按键相同)。注意1不对应任何字母。 示例......
  • 【LeetCode二叉树#00】二叉树的基础知识
    基础知识分类满二叉树如果二叉树中除了叶子结点,每个结点的度都为2,则此二叉树称为满二叉树。完全二叉树除了底层外,其他部分是满的,且底层从左到右是连续的,称为完全二......
  • 闲话 23.2.17
    闲话发现自己没学过欧拉数相关的推导开koishi的排列去(一会儿补个euleriannumber的bgf的推导。现在从略(今日放了be的歌?不谈演唱中只有少部分人能接受的部分......
  • HDLBits(11)2.17
    3电路3.1组合逻辑3.1.1基础门Ringorvibrate(静音)若手机处于震动模式则振动(motor),否则打开铃声(Ringer)assignringer=ring&(~vibrate_mode);assignmotor=ri......
  • LeetCode HOT 100:乘积最大子数组(动态规划)
    题目:152.乘积最大子数组题目描述:给你一个整数数组,在该数组的所有子数组中,找到一个子数组中所有元素相乘积最大,返回这个最大的积。子数组就是一个数组中,由一个或几个下标......