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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

程序员面试金典 - 面试题 17.23. 最大黑方阵(DP)

發布時間:2024/7/5 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 程序员面试金典 - 面试题 17.23. 最大黑方阵(DP) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. 題目

給定一個方陣,其中每個單元(像素)非黑即白。
設計一個算法,找出 4 條邊皆為黑色像素的最大子方陣。

返回一個數組 [r, c, size] ,其中 r, c 分別代表子方陣左上角的行號和列號,size 是子方陣的邊長。
若有多個滿足條件的子方陣,返回 r 最小的,若 r 相同,返回 c 最小的子方陣。
若無滿足條件的子方陣,返回空數組。

matrix.length == matrix[0].length <= 200

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

2. 解題

類似題目:LeetCode 1139. 最大的以 1 為邊界的正方形(DP)

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

108 ms 19.2 MB

總結

以上是生活随笔為你收集整理的程序员面试金典 - 面试题 17.23. 最大黑方阵(DP)的全部內容,希望文章能夠幫你解決所遇到的問題。

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