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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

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

1. 題目

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

返回一個(gè)數(shù)組 [r, c, size] ,其中 r, c 分別代表子方陣左上角的行號(hào)和列號(hào),size 是子方陣的邊長(zhǎng)。
若有多個(gè)滿足條件的子方陣,返回 r 最小的,若 r 相同,返回 c 最小的子方陣。
若無滿足條件的子方陣,返回空數(shù)組。

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

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/max-black-square-lcci
著作權(quán)歸領(lǐng)扣網(wǎng)絡(luò)所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系官方授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。

2. 解題

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

  • 求得每個(gè)坐標(biāo)位置處的 上方、左側(cè) 連續(xù)的0 有多少個(gè)
  • 從右下角開始遍歷每個(gè)位置,每個(gè)點(diǎn)的初始邊長(zhǎng)edge取 min(上、左)
  • 檢測(cè)另外兩條邊是不是也 >= 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));//向上連續(xù)0個(gè)數(shù)vector<vector<int>> sumof0Left(m, vector<int>(n,0));//向左連續(xù)0個(gè)數(shù)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]);//初始邊長(zhǎng)while(edge > 0){if(ans[2] > edge)//肯定小,不必檢查了break;x = i-edge+1;//上方邊的xy = j-edge+1;//左側(cè)邊的yif(sumof0Up[i][y]>=edge && sumof0Left[x][j]>=edge){ //左側(cè)邊 上側(cè)邊長(zhǎng)都大于等 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

總結(jié)

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

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。