日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

LeetCode 1139. 最大的以 1 为边界的正方形(DP)

發布時間:2024/7/5 编程问答 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LeetCode 1139. 最大的以 1 为边界的正方形(DP) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. 題目

給你一個由若干 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]01

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/largest-1-bordered-square
著作權歸領扣網絡所有。商業轉載請聯系官方授權,非商業轉載請注明出處。

2. 解題

參看 :程序員面試金典 - 面試題 17.23. 最大黑方陣(DP)

  • 求得每個坐標位置處的 上方、左側 連續的 1 有多少個
  • 從右下角開始遍歷每個位置,每個點的初始邊長edge取 min(上、左)
  • 檢測另外兩條邊是不是也 >= edge,求取最大的邊長
class Solution { public:int largest1BorderedSquare(vector<vector<int>>& grid) {int m = grid.size(), n = grid[0].size(), i, j;vector<vector<int>> sumof1Up(m, vector<int>(n,0));//向上連續1的個數vector<vector<int>> sumof1Left(m, vector<int>(n,0));//向左連續1的個數for(i = 0; i < m; i++){for(j = 0; j < n; j++){if(grid[i][j] == 1){if(i==0 && j==0)sumof1Left[i][j] = 1, sumof1Up[i][j] = 1;else if(i==0 && j>0){sumof1Left[i][j] = sumof1Left[i][j-1]+1;sumof1Up[i][j] = 1;}else if(j==0 && i > 0){sumof1Left[i][j] = 1;sumof1Up[i][j] = sumof1Up[i-1][j]+1;}else{sumof1Left[i][j] = sumof1Left[i][j-1]+1;sumof1Up[i][j] = sumof1Up[i-1][j]+1;}}}}int maxEdge = 0, edge, x, y;for(i = m-1; i >= 0; i--){for(j = n-1; j >= 0; --j){edge = min(sumof1Up[i][j], sumof1Left[i][j]);//初始邊長while(edge > 0){if(maxEdge > edge)//肯定小,不必檢查了break;x = i-edge+1;//上方邊的xy = j-edge+1;//左側邊的yif(sumof1Up[i][y]>=edge && sumof1Left[x][j]>=edge){ //左側邊 上側邊長都大于等 edgemaxEdge = edge;}edge--;//遍歷所有可能}}}return maxEdge*maxEdge;} };

44 ms 11.3 MB

總結

以上是生活随笔為你收集整理的LeetCode 1139. 最大的以 1 为边界的正方形(DP)的全部內容,希望文章能夠幫你解決所遇到的問題。

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